Index: branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/AdministratorMenuItem.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/AdministratorMenuItem.cs	(revision 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/AdministratorMenuItem.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 5298)
@@ -0,0 +1,424 @@
+﻿<?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">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Clients.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <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">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimizer-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/HeuristicLabClientsOKBPlugin.cs.frame	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/OKBClient.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/OKBExperiment.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Properties/AssemblyInfo.frame	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/QueryMenuItem.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/Algorithm.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/AlgorithmClass.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/AlgorithmData.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/AlgorithmParameter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/AndFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/AuthenticationServiceClient.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/DataType.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/Experiment.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/Filter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/GenerateServiceClients.cmd	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/INamedOKBItem.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/IOKBItem.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/NameEqualityComparisonBoolFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/NameEqualityComparisonByteArrayFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/NameOrdinalComparisonDoubleFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/NameOrdinalComparisonLongFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/NameSetComparisonStringAvailableValuesFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/NameSetComparisonStringFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/NamedOKBItem.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/OKBItem.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/OKBServiceClient.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/OrFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/OrdinalComparisonDateTimeFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/OrdinalComparisonLongFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/Platform.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/Problem.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/ProblemClass.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/ProblemData.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/ProblemParameter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/Result.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/Run.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/SetComparisonStringAvailableValuesFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/ServiceClients/SetComparisonStringFilter.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/UpdateLocalInstallation.cmd	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AdministratorView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AdministratorView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmClassCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmClassCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmDataView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmDataView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmParameterCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmParameterCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmParameterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmParameterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AlgorithmView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AndFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/AndFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/CombinedFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/CombinedFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/DataTypeCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/DataTypeCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/DataTypeView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/DataTypeView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/EqualityComparisonFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/EqualityComparisonFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ExperimentCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ExperimentCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ExperimentView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ExperimentView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/FilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/FilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NameEqualityComparisonBoolFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NameEqualityComparisonBoolFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NameOrdinalComparisonDoubleFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NameOrdinalComparisonDoubleFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NameOrdinalComparisonLongFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NameOrdinalComparisonLongFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NameSetComparisonStringAvailableValuesFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NameSetComparisonStringAvailableValuesFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NameSetComparisonStringFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NameSetComparisonStringFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NamedOKBItemView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/NamedOKBItemView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OKBExperimentView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OKBExperimentView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OKBItemView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OKBItemView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OrFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OrFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OrdinalComparisonFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OrdinalComparisonFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OrdinalComparisonLongFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OrdinalComparisonLongFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/PlatformCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/PlatformCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemClassCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemClassCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemDataView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemDataView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemParameterCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemParameterCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemParameterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemParameterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ProblemView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/QueryView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/QueryView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ResultCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ResultCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ResultView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/ResultView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/RunCollectionView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/RunCollectionView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/RunView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/RunView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/SetComparisonFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/SetComparisonFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/SetComparisonStringAvailableValuesFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/SetComparisonStringAvailableValuesFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/SetComparisonStringFilterView.Designer.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/SetComparisonStringFilterView.cs	(revision 5298)
@@ -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 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/app.config	(revision 5298)
@@ -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.OKB.sln
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.OKB.sln	(revision 5297)
+++ branches/OKB (trunk integration)/HeuristicLab.OKB.sln	(revision 5298)
@@ -3,9 +3,4 @@
 # 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}"
@@ -16,4 +11,6 @@
 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
+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
 Global
@@ -27,12 +24,4 @@
 	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
@@ -75,4 +64,12 @@
 		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|x64.ActiveCfg = Release|Any CPU
 		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|x86.ActiveCfg = Release|Any CPU
+		{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
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
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 5297)
+++ 	(revision )
@@ -1,536 +1,0 @@
-#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/L2ST4.ttinclude
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/L2ST4.ttinclude	(revision 5297)
+++ 	(revision )
@@ -1,853 +1,0 @@
-﻿<#@ 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.designer.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.designer.cs	(revision 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.designer.cs	(revision 5298)
@@ -0,0 +1,8933 @@
+﻿#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <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
+{
+	using System.Data.Linq;
+	using System.Data.Linq.Mapping;
+	using System.Data;
+	using System.Collections.Generic;
+	using System.Reflection;
+	using System.Linq;
+	using System.Linq.Expressions;
+	using System.ComponentModel;
+	using System;
+	
+	
+	[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="HeuristicLab.OKB")]
+	public partial class OKBDataContext : System.Data.Linq.DataContext
+	{
+		
+		private static System.Data.Linq.Mapping.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 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 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);
+    partial void InsertAlgorithmData(AlgorithmData instance);
+    partial void UpdateAlgorithmData(AlgorithmData instance);
+    partial void DeleteAlgorithmData(AlgorithmData instance);
+    partial void InsertProblemData(ProblemData instance);
+    partial void UpdateProblemData(ProblemData instance);
+    partial void DeleteProblemData(ProblemData instance);
+    #endregion
+		
+		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, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public OKBDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public System.Data.Linq.Table<AlgorithmClass> AlgorithmClasses
+		{
+			get
+			{
+				return this.GetTable<AlgorithmClass>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Algorithm> Algorithms
+		{
+			get
+			{
+				return this.GetTable<Algorithm>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Problem> Problems
+		{
+			get
+			{
+				return this.GetTable<Problem>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ProblemClass> ProblemClasses
+		{
+			get
+			{
+				return this.GetTable<ProblemClass>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Experiment> Experiments
+		{
+			get
+			{
+				return this.GetTable<Experiment>();
+			}
+		}
+		
+		public System.Data.Linq.Table<AlgorithmParameter> AlgorithmParameters
+		{
+			get
+			{
+				return this.GetTable<AlgorithmParameter>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ProblemParameter> ProblemParameters
+		{
+			get
+			{
+				return this.GetTable<ProblemParameter>();
+			}
+		}
+		
+		public System.Data.Linq.Table<AlgorithmUser> AlgorithmUsers
+		{
+			get
+			{
+				return this.GetTable<AlgorithmUser>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ProblemUser> ProblemUsers
+		{
+			get
+			{
+				return this.GetTable<ProblemUser>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Platform> Platforms
+		{
+			get
+			{
+				return this.GetTable<Platform>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Run> Runs
+		{
+			get
+			{
+				return this.GetTable<Run>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Result> Results
+		{
+			get
+			{
+				return this.GetTable<Result>();
+			}
+		}
+		
+		public System.Data.Linq.Table<AlgorithmParameterBlobValue> AlgorithmParameterBlobValues
+		{
+			get
+			{
+				return this.GetTable<AlgorithmParameterBlobValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<DataType> DataTypes
+		{
+			get
+			{
+				return this.GetTable<DataType>();
+			}
+		}
+		
+		public System.Data.Linq.Table<AlgorithmParameterBoolValue> AlgorithmParameterBoolValues
+		{
+			get
+			{
+				return this.GetTable<AlgorithmParameterBoolValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<AlgorithmParameterFloatValue> AlgorithmParameterFloatValues
+		{
+			get
+			{
+				return this.GetTable<AlgorithmParameterFloatValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<AlgorithmParameterIntValue> AlgorithmParameterIntValues
+		{
+			get
+			{
+				return this.GetTable<AlgorithmParameterIntValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<AlgorithmParameterStringValue> AlgorithmParameterStringValues
+		{
+			get
+			{
+				return this.GetTable<AlgorithmParameterStringValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ProblemParameterBlobValue> ProblemParameterBlobValues
+		{
+			get
+			{
+				return this.GetTable<ProblemParameterBlobValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ProblemParameterBoolValue> ProblemParameterBoolValues
+		{
+			get
+			{
+				return this.GetTable<ProblemParameterBoolValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ProblemParameterFloatValue> ProblemParameterFloatValues
+		{
+			get
+			{
+				return this.GetTable<ProblemParameterFloatValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ProblemParameterIntValue> ProblemParameterIntValues
+		{
+			get
+			{
+				return this.GetTable<ProblemParameterIntValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ProblemParameterStringValue> ProblemParameterStringValues
+		{
+			get
+			{
+				return this.GetTable<ProblemParameterStringValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ResultBlobValue> ResultBlobValues
+		{
+			get
+			{
+				return this.GetTable<ResultBlobValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ResultBoolValue> ResultBoolValues
+		{
+			get
+			{
+				return this.GetTable<ResultBoolValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ResultFloatValue> ResultFloatValues
+		{
+			get
+			{
+				return this.GetTable<ResultFloatValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ResultIntValue> ResultIntValues
+		{
+			get
+			{
+				return this.GetTable<ResultIntValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ResultStringValue> ResultStringValues
+		{
+			get
+			{
+				return this.GetTable<ResultStringValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<AlgorithmData> AlgorithmDatas
+		{
+			get
+			{
+				return this.GetTable<AlgorithmData>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ProblemData> ProblemDatas
+		{
+			get
+			{
+				return this.GetTable<ProblemData>();
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AlgorithmClass")]
+	public partial class AlgorithmClass : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private string _Name;
+		
+		private string _Description;
+		
+		private EntitySet<Algorithm> _Algorithms;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    #endregion
+		
+		public AlgorithmClass()
+		{
+			this._Algorithms = new EntitySet<Algorithm>(new Action<Algorithm>(this.attach_Algorithms), new Action<Algorithm>(this.detach_Algorithms));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(200) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmClass_Algorithm", Storage="_Algorithms", ThisKey="Id", OtherKey="AlgorithmClassId")]
+		public EntitySet<Algorithm> Algorithms
+		{
+			get
+			{
+				return this._Algorithms;
+			}
+			set
+			{
+				this._Algorithms.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Algorithms(Algorithm entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmClass = this;
+		}
+		
+		private void detach_Algorithms(Algorithm entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmClass = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Algorithm")]
+	public partial class Algorithm : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private long _AlgorithmClassId;
+		
+		private long _PlatformId;
+		
+		private string _Name;
+		
+		private string _Description;
+		
+		private EntitySet<Experiment> _Experiments;
+		
+		private EntitySet<AlgorithmParameter> _AlgorithmParameters;
+		
+		private EntitySet<AlgorithmUser> _AlgorithmUsers;
+		
+		private EntitySet<Result> _Results;
+		
+		private EntityRef<AlgorithmData> _AlgorithmData;
+		
+		private EntityRef<AlgorithmClass> _AlgorithmClass;
+		
+		private EntityRef<Platform> _Platform;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnAlgorithmClassIdChanging(long value);
+    partial void OnAlgorithmClassIdChanged();
+    partial void OnPlatformIdChanging(long value);
+    partial void OnPlatformIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    #endregion
+		
+		public Algorithm()
+		{
+			this._Experiments = new EntitySet<Experiment>(new Action<Experiment>(this.attach_Experiments), new Action<Experiment>(this.detach_Experiments));
+			this._AlgorithmParameters = new EntitySet<AlgorithmParameter>(new Action<AlgorithmParameter>(this.attach_AlgorithmParameters), new Action<AlgorithmParameter>(this.detach_AlgorithmParameters));
+			this._AlgorithmUsers = new EntitySet<AlgorithmUser>(new Action<AlgorithmUser>(this.attach_AlgorithmUsers), new Action<AlgorithmUser>(this.detach_AlgorithmUsers));
+			this._Results = new EntitySet<Result>(new Action<Result>(this.attach_Results), new Action<Result>(this.detach_Results));
+			this._AlgorithmData = default(EntityRef<AlgorithmData>);
+			this._AlgorithmClass = default(EntityRef<AlgorithmClass>);
+			this._Platform = default(EntityRef<Platform>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmClassId", DbType="BigInt NOT NULL")]
+		public long AlgorithmClassId
+		{
+			get
+			{
+				return this._AlgorithmClassId;
+			}
+			set
+			{
+				if ((this._AlgorithmClassId != value))
+				{
+					if (this._AlgorithmClass.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmClassIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmClassId = value;
+					this.SendPropertyChanged("AlgorithmClassId");
+					this.OnAlgorithmClassIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PlatformId", DbType="BigInt NOT NULL")]
+		public long PlatformId
+		{
+			get
+			{
+				return this._PlatformId;
+			}
+			set
+			{
+				if ((this._PlatformId != value))
+				{
+					if (this._Platform.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnPlatformIdChanging(value);
+					this.SendPropertyChanging();
+					this._PlatformId = value;
+					this.SendPropertyChanged("PlatformId");
+					this.OnPlatformIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(200) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_Experiment", Storage="_Experiments", ThisKey="Id", OtherKey="AlgorithmId")]
+		public EntitySet<Experiment> Experiments
+		{
+			get
+			{
+				return this._Experiments;
+			}
+			set
+			{
+				this._Experiments.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_AlgorithmParameter", Storage="_AlgorithmParameters", ThisKey="Id", OtherKey="AlgorithmId")]
+		public EntitySet<AlgorithmParameter> AlgorithmParameters
+		{
+			get
+			{
+				return this._AlgorithmParameters;
+			}
+			set
+			{
+				this._AlgorithmParameters.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_AlgorithmUser", Storage="_AlgorithmUsers", ThisKey="Id", OtherKey="AlgorithmId")]
+		public EntitySet<AlgorithmUser> AlgorithmUsers
+		{
+			get
+			{
+				return this._AlgorithmUsers;
+			}
+			set
+			{
+				this._AlgorithmUsers.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_Result", Storage="_Results", ThisKey="Id", OtherKey="AlgorithmId")]
+		public EntitySet<Result> Results
+		{
+			get
+			{
+				return this._Results;
+			}
+			set
+			{
+				this._Results.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_AlgorithmData", Storage="_AlgorithmData", ThisKey="Id", OtherKey="AlgorithmId", IsUnique=true, IsForeignKey=false)]
+		public AlgorithmData AlgorithmData
+		{
+			get
+			{
+				return this._AlgorithmData.Entity;
+			}
+			set
+			{
+				AlgorithmData previousValue = this._AlgorithmData.Entity;
+				if (((previousValue != value) 
+							|| (this._AlgorithmData.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._AlgorithmData.Entity = null;
+						previousValue.Algorithm = null;
+					}
+					this._AlgorithmData.Entity = value;
+					if ((value != null))
+					{
+						value.Algorithm = this;
+					}
+					this.SendPropertyChanged("AlgorithmData");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmClass_Algorithm", Storage="_AlgorithmClass", ThisKey="AlgorithmClassId", OtherKey="Id", IsForeignKey=true)]
+		public AlgorithmClass AlgorithmClass
+		{
+			get
+			{
+				return this._AlgorithmClass.Entity;
+			}
+			set
+			{
+				AlgorithmClass previousValue = this._AlgorithmClass.Entity;
+				if (((previousValue != value) 
+							|| (this._AlgorithmClass.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._AlgorithmClass.Entity = null;
+						previousValue.Algorithms.Remove(this);
+					}
+					this._AlgorithmClass.Entity = value;
+					if ((value != null))
+					{
+						value.Algorithms.Add(this);
+						this._AlgorithmClassId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmClassId = default(long);
+					}
+					this.SendPropertyChanged("AlgorithmClass");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Platform_Algorithm", Storage="_Platform", ThisKey="PlatformId", OtherKey="Id", IsForeignKey=true)]
+		public Platform Platform
+		{
+			get
+			{
+				return this._Platform.Entity;
+			}
+			set
+			{
+				Platform previousValue = this._Platform.Entity;
+				if (((previousValue != value) 
+							|| (this._Platform.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Platform.Entity = null;
+						previousValue.Algorithms.Remove(this);
+					}
+					this._Platform.Entity = value;
+					if ((value != null))
+					{
+						value.Algorithms.Add(this);
+						this._PlatformId = value.Id;
+					}
+					else
+					{
+						this._PlatformId = default(long);
+					}
+					this.SendPropertyChanged("Platform");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Experiments(Experiment entity)
+		{
+			this.SendPropertyChanging();
+			entity.Algorithm = this;
+		}
+		
+		private void detach_Experiments(Experiment entity)
+		{
+			this.SendPropertyChanging();
+			entity.Algorithm = null;
+		}
+		
+		private void attach_AlgorithmParameters(AlgorithmParameter entity)
+		{
+			this.SendPropertyChanging();
+			entity.Algorithm = this;
+		}
+		
+		private void detach_AlgorithmParameters(AlgorithmParameter entity)
+		{
+			this.SendPropertyChanging();
+			entity.Algorithm = null;
+		}
+		
+		private void attach_AlgorithmUsers(AlgorithmUser entity)
+		{
+			this.SendPropertyChanging();
+			entity.Algorithm = this;
+		}
+		
+		private void detach_AlgorithmUsers(AlgorithmUser entity)
+		{
+			this.SendPropertyChanging();
+			entity.Algorithm = null;
+		}
+		
+		private void attach_Results(Result entity)
+		{
+			this.SendPropertyChanging();
+			entity.Algorithm = this;
+		}
+		
+		private void detach_Results(Result entity)
+		{
+			this.SendPropertyChanging();
+			entity.Algorithm = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Problem")]
+	public partial class Problem : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private long _ProblemClassId;
+		
+		private long _PlatformId;
+		
+		private string _Name;
+		
+		private string _Description;
+		
+		private EntitySet<Experiment> _Experiments;
+		
+		private EntitySet<ProblemParameter> _ProblemParameters;
+		
+		private EntitySet<ProblemUser> _ProblemUsers;
+		
+		private EntityRef<ProblemData> _ProblemData;
+		
+		private EntityRef<ProblemClass> _ProblemClass;
+		
+		private EntityRef<Platform> _Platform;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnProblemClassIdChanging(long value);
+    partial void OnProblemClassIdChanged();
+    partial void OnPlatformIdChanging(long value);
+    partial void OnPlatformIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    #endregion
+		
+		public Problem()
+		{
+			this._Experiments = new EntitySet<Experiment>(new Action<Experiment>(this.attach_Experiments), new Action<Experiment>(this.detach_Experiments));
+			this._ProblemParameters = new EntitySet<ProblemParameter>(new Action<ProblemParameter>(this.attach_ProblemParameters), new Action<ProblemParameter>(this.detach_ProblemParameters));
+			this._ProblemUsers = new EntitySet<ProblemUser>(new Action<ProblemUser>(this.attach_ProblemUsers), new Action<ProblemUser>(this.detach_ProblemUsers));
+			this._ProblemData = default(EntityRef<ProblemData>);
+			this._ProblemClass = default(EntityRef<ProblemClass>);
+			this._Platform = default(EntityRef<Platform>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemClassId", DbType="BigInt NOT NULL")]
+		public long ProblemClassId
+		{
+			get
+			{
+				return this._ProblemClassId;
+			}
+			set
+			{
+				if ((this._ProblemClassId != value))
+				{
+					if (this._ProblemClass.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemClassIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemClassId = value;
+					this.SendPropertyChanged("ProblemClassId");
+					this.OnProblemClassIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PlatformId", DbType="BigInt NOT NULL")]
+		public long PlatformId
+		{
+			get
+			{
+				return this._PlatformId;
+			}
+			set
+			{
+				if ((this._PlatformId != value))
+				{
+					if (this._Platform.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnPlatformIdChanging(value);
+					this.SendPropertyChanging();
+					this._PlatformId = value;
+					this.SendPropertyChanged("PlatformId");
+					this.OnPlatformIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(200) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Problem_Experiment", Storage="_Experiments", ThisKey="Id", OtherKey="ProblemId")]
+		public EntitySet<Experiment> Experiments
+		{
+			get
+			{
+				return this._Experiments;
+			}
+			set
+			{
+				this._Experiments.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Problem_ProblemParameter", Storage="_ProblemParameters", ThisKey="Id", OtherKey="ProblemId")]
+		public EntitySet<ProblemParameter> ProblemParameters
+		{
+			get
+			{
+				return this._ProblemParameters;
+			}
+			set
+			{
+				this._ProblemParameters.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Problem_ProblemUser", Storage="_ProblemUsers", ThisKey="Id", OtherKey="ProblemId")]
+		public EntitySet<ProblemUser> ProblemUsers
+		{
+			get
+			{
+				return this._ProblemUsers;
+			}
+			set
+			{
+				this._ProblemUsers.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Problem_ProblemData", Storage="_ProblemData", ThisKey="Id", OtherKey="ProblemId", IsUnique=true, IsForeignKey=false)]
+		public ProblemData ProblemData
+		{
+			get
+			{
+				return this._ProblemData.Entity;
+			}
+			set
+			{
+				ProblemData previousValue = this._ProblemData.Entity;
+				if (((previousValue != value) 
+							|| (this._ProblemData.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ProblemData.Entity = null;
+						previousValue.Problem = null;
+					}
+					this._ProblemData.Entity = value;
+					if ((value != null))
+					{
+						value.Problem = this;
+					}
+					this.SendPropertyChanged("ProblemData");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemClass_Problem", Storage="_ProblemClass", ThisKey="ProblemClassId", OtherKey="Id", IsForeignKey=true)]
+		public ProblemClass ProblemClass
+		{
+			get
+			{
+				return this._ProblemClass.Entity;
+			}
+			set
+			{
+				ProblemClass previousValue = this._ProblemClass.Entity;
+				if (((previousValue != value) 
+							|| (this._ProblemClass.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ProblemClass.Entity = null;
+						previousValue.Problems.Remove(this);
+					}
+					this._ProblemClass.Entity = value;
+					if ((value != null))
+					{
+						value.Problems.Add(this);
+						this._ProblemClassId = value.Id;
+					}
+					else
+					{
+						this._ProblemClassId = default(long);
+					}
+					this.SendPropertyChanged("ProblemClass");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Platform_Problem", Storage="_Platform", ThisKey="PlatformId", OtherKey="Id", IsForeignKey=true)]
+		public Platform Platform
+		{
+			get
+			{
+				return this._Platform.Entity;
+			}
+			set
+			{
+				Platform previousValue = this._Platform.Entity;
+				if (((previousValue != value) 
+							|| (this._Platform.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Platform.Entity = null;
+						previousValue.Problems.Remove(this);
+					}
+					this._Platform.Entity = value;
+					if ((value != null))
+					{
+						value.Problems.Add(this);
+						this._PlatformId = value.Id;
+					}
+					else
+					{
+						this._PlatformId = default(long);
+					}
+					this.SendPropertyChanged("Platform");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Experiments(Experiment entity)
+		{
+			this.SendPropertyChanging();
+			entity.Problem = this;
+		}
+		
+		private void detach_Experiments(Experiment entity)
+		{
+			this.SendPropertyChanging();
+			entity.Problem = null;
+		}
+		
+		private void attach_ProblemParameters(ProblemParameter entity)
+		{
+			this.SendPropertyChanging();
+			entity.Problem = this;
+		}
+		
+		private void detach_ProblemParameters(ProblemParameter entity)
+		{
+			this.SendPropertyChanging();
+			entity.Problem = null;
+		}
+		
+		private void attach_ProblemUsers(ProblemUser entity)
+		{
+			this.SendPropertyChanging();
+			entity.Problem = this;
+		}
+		
+		private void detach_ProblemUsers(ProblemUser entity)
+		{
+			this.SendPropertyChanging();
+			entity.Problem = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ProblemClass")]
+	public partial class ProblemClass : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private string _Name;
+		
+		private string _Description;
+		
+		private EntitySet<Problem> _Problems;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    #endregion
+		
+		public ProblemClass()
+		{
+			this._Problems = new EntitySet<Problem>(new Action<Problem>(this.attach_Problems), new Action<Problem>(this.detach_Problems));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(200) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemClass_Problem", Storage="_Problems", ThisKey="Id", OtherKey="ProblemClassId")]
+		public EntitySet<Problem> Problems
+		{
+			get
+			{
+				return this._Problems;
+			}
+			set
+			{
+				this._Problems.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Problems(Problem entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemClass = this;
+		}
+		
+		private void detach_Problems(Problem entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemClass = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Experiment")]
+	public partial class Experiment : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private long _AlgorithmId;
+		
+		private long _ProblemId;
+		
+		private EntitySet<Run> _Runs;
+		
+		private EntitySet<AlgorithmParameterBlobValue> _AlgorithmParameterBlobValues;
+		
+		private EntitySet<AlgorithmParameterBoolValue> _AlgorithmParameterBoolValues;
+		
+		private EntitySet<AlgorithmParameterFloatValue> _AlgorithmParameterFloatValues;
+		
+		private EntitySet<AlgorithmParameterIntValue> _AlgorithmParameterIntValues;
+		
+		private EntitySet<AlgorithmParameterStringValue> _AlgorithmParameterStringValues;
+		
+		private EntitySet<ProblemParameterBlobValue> _ProblemParameterBlobValues;
+		
+		private EntitySet<ProblemParameterBoolValue> _ProblemParameterBoolValues;
+		
+		private EntitySet<ProblemParameterFloatValue> _ProblemParameterFloatValues;
+		
+		private EntitySet<ProblemParameterIntValue> _ProblemParameterIntValues;
+		
+		private EntitySet<ProblemParameterStringValue> _ProblemParameterStringValues;
+		
+		private EntityRef<Problem> _Problem;
+		
+		private EntityRef<Algorithm> _Algorithm;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnAlgorithmIdChanging(long value);
+    partial void OnAlgorithmIdChanged();
+    partial void OnProblemIdChanging(long value);
+    partial void OnProblemIdChanged();
+    #endregion
+		
+		public Experiment()
+		{
+			this._Runs = new EntitySet<Run>(new Action<Run>(this.attach_Runs), new Action<Run>(this.detach_Runs));
+			this._AlgorithmParameterBlobValues = new EntitySet<AlgorithmParameterBlobValue>(new Action<AlgorithmParameterBlobValue>(this.attach_AlgorithmParameterBlobValues), new Action<AlgorithmParameterBlobValue>(this.detach_AlgorithmParameterBlobValues));
+			this._AlgorithmParameterBoolValues = new EntitySet<AlgorithmParameterBoolValue>(new Action<AlgorithmParameterBoolValue>(this.attach_AlgorithmParameterBoolValues), new Action<AlgorithmParameterBoolValue>(this.detach_AlgorithmParameterBoolValues));
+			this._AlgorithmParameterFloatValues = new EntitySet<AlgorithmParameterFloatValue>(new Action<AlgorithmParameterFloatValue>(this.attach_AlgorithmParameterFloatValues), new Action<AlgorithmParameterFloatValue>(this.detach_AlgorithmParameterFloatValues));
+			this._AlgorithmParameterIntValues = new EntitySet<AlgorithmParameterIntValue>(new Action<AlgorithmParameterIntValue>(this.attach_AlgorithmParameterIntValues), new Action<AlgorithmParameterIntValue>(this.detach_AlgorithmParameterIntValues));
+			this._AlgorithmParameterStringValues = new EntitySet<AlgorithmParameterStringValue>(new Action<AlgorithmParameterStringValue>(this.attach_AlgorithmParameterStringValues), new Action<AlgorithmParameterStringValue>(this.detach_AlgorithmParameterStringValues));
+			this._ProblemParameterBlobValues = new EntitySet<ProblemParameterBlobValue>(new Action<ProblemParameterBlobValue>(this.attach_ProblemParameterBlobValues), new Action<ProblemParameterBlobValue>(this.detach_ProblemParameterBlobValues));
+			this._ProblemParameterBoolValues = new EntitySet<ProblemParameterBoolValue>(new Action<ProblemParameterBoolValue>(this.attach_ProblemParameterBoolValues), new Action<ProblemParameterBoolValue>(this.detach_ProblemParameterBoolValues));
+			this._ProblemParameterFloatValues = new EntitySet<ProblemParameterFloatValue>(new Action<ProblemParameterFloatValue>(this.attach_ProblemParameterFloatValues), new Action<ProblemParameterFloatValue>(this.detach_ProblemParameterFloatValues));
+			this._ProblemParameterIntValues = new EntitySet<ProblemParameterIntValue>(new Action<ProblemParameterIntValue>(this.attach_ProblemParameterIntValues), new Action<ProblemParameterIntValue>(this.detach_ProblemParameterIntValues));
+			this._ProblemParameterStringValues = new EntitySet<ProblemParameterStringValue>(new Action<ProblemParameterStringValue>(this.attach_ProblemParameterStringValues), new Action<ProblemParameterStringValue>(this.detach_ProblemParameterStringValues));
+			this._Problem = default(EntityRef<Problem>);
+			this._Algorithm = default(EntityRef<Algorithm>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmId", DbType="BigInt NOT NULL")]
+		public long AlgorithmId
+		{
+			get
+			{
+				return this._AlgorithmId;
+			}
+			set
+			{
+				if ((this._AlgorithmId != value))
+				{
+					if (this._Algorithm.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmId = value;
+					this.SendPropertyChanged("AlgorithmId");
+					this.OnAlgorithmIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemId", DbType="BigInt NOT NULL")]
+		public long ProblemId
+		{
+			get
+			{
+				return this._ProblemId;
+			}
+			set
+			{
+				if ((this._ProblemId != value))
+				{
+					if (this._Problem.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemId = value;
+					this.SendPropertyChanged("ProblemId");
+					this.OnProblemIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_Run", Storage="_Runs", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<Run> Runs
+		{
+			get
+			{
+				return this._Runs;
+			}
+			set
+			{
+				this._Runs.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_AlgorithmParameterBlobValue", Storage="_AlgorithmParameterBlobValues", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<AlgorithmParameterBlobValue> AlgorithmParameterBlobValues
+		{
+			get
+			{
+				return this._AlgorithmParameterBlobValues;
+			}
+			set
+			{
+				this._AlgorithmParameterBlobValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_AlgorithmParameterBoolValue", Storage="_AlgorithmParameterBoolValues", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<AlgorithmParameterBoolValue> AlgorithmParameterBoolValues
+		{
+			get
+			{
+				return this._AlgorithmParameterBoolValues;
+			}
+			set
+			{
+				this._AlgorithmParameterBoolValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_AlgorithmParameterFloatValue", Storage="_AlgorithmParameterFloatValues", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<AlgorithmParameterFloatValue> AlgorithmParameterFloatValues
+		{
+			get
+			{
+				return this._AlgorithmParameterFloatValues;
+			}
+			set
+			{
+				this._AlgorithmParameterFloatValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_AlgorithmParameterIntValue", Storage="_AlgorithmParameterIntValues", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<AlgorithmParameterIntValue> AlgorithmParameterIntValues
+		{
+			get
+			{
+				return this._AlgorithmParameterIntValues;
+			}
+			set
+			{
+				this._AlgorithmParameterIntValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_AlgorithmParameterStringValue", Storage="_AlgorithmParameterStringValues", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<AlgorithmParameterStringValue> AlgorithmParameterStringValues
+		{
+			get
+			{
+				return this._AlgorithmParameterStringValues;
+			}
+			set
+			{
+				this._AlgorithmParameterStringValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_ProblemParameterBlobValue", Storage="_ProblemParameterBlobValues", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<ProblemParameterBlobValue> ProblemParameterBlobValues
+		{
+			get
+			{
+				return this._ProblemParameterBlobValues;
+			}
+			set
+			{
+				this._ProblemParameterBlobValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_ProblemParameterBoolValue", Storage="_ProblemParameterBoolValues", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<ProblemParameterBoolValue> ProblemParameterBoolValues
+		{
+			get
+			{
+				return this._ProblemParameterBoolValues;
+			}
+			set
+			{
+				this._ProblemParameterBoolValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_ProblemParameterFloatValue", Storage="_ProblemParameterFloatValues", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<ProblemParameterFloatValue> ProblemParameterFloatValues
+		{
+			get
+			{
+				return this._ProblemParameterFloatValues;
+			}
+			set
+			{
+				this._ProblemParameterFloatValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_ProblemParameterIntValue", Storage="_ProblemParameterIntValues", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<ProblemParameterIntValue> ProblemParameterIntValues
+		{
+			get
+			{
+				return this._ProblemParameterIntValues;
+			}
+			set
+			{
+				this._ProblemParameterIntValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_ProblemParameterStringValue", Storage="_ProblemParameterStringValues", ThisKey="Id", OtherKey="ExperimentId")]
+		public EntitySet<ProblemParameterStringValue> ProblemParameterStringValues
+		{
+			get
+			{
+				return this._ProblemParameterStringValues;
+			}
+			set
+			{
+				this._ProblemParameterStringValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Problem_Experiment", Storage="_Problem", ThisKey="ProblemId", OtherKey="Id", IsForeignKey=true)]
+		public Problem Problem
+		{
+			get
+			{
+				return this._Problem.Entity;
+			}
+			set
+			{
+				Problem previousValue = this._Problem.Entity;
+				if (((previousValue != value) 
+							|| (this._Problem.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Problem.Entity = null;
+						previousValue.Experiments.Remove(this);
+					}
+					this._Problem.Entity = value;
+					if ((value != null))
+					{
+						value.Experiments.Add(this);
+						this._ProblemId = value.Id;
+					}
+					else
+					{
+						this._ProblemId = default(long);
+					}
+					this.SendPropertyChanged("Problem");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_Experiment", Storage="_Algorithm", ThisKey="AlgorithmId", OtherKey="Id", IsForeignKey=true)]
+		public Algorithm Algorithm
+		{
+			get
+			{
+				return this._Algorithm.Entity;
+			}
+			set
+			{
+				Algorithm previousValue = this._Algorithm.Entity;
+				if (((previousValue != value) 
+							|| (this._Algorithm.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Algorithm.Entity = null;
+						previousValue.Experiments.Remove(this);
+					}
+					this._Algorithm.Entity = value;
+					if ((value != null))
+					{
+						value.Experiments.Add(this);
+						this._AlgorithmId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmId = default(long);
+					}
+					this.SendPropertyChanged("Algorithm");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Runs(Run entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_Runs(Run entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		
+		private void attach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		
+		private void attach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		
+		private void attach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		
+		private void attach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		
+		private void attach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		
+		private void attach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		
+		private void attach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		
+		private void attach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		
+		private void attach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		
+		private void attach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Experiment = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AlgorithmParameter")]
+	public partial class AlgorithmParameter : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private long _AlgorithmId;
+		
+		private string _Name;
+		
+		private string _Alias;
+		
+		private string _Description;
+		
+		private long _DataTypeId;
+		
+		private EntitySet<AlgorithmParameterBlobValue> _AlgorithmParameterBlobValues;
+		
+		private EntitySet<AlgorithmParameterBoolValue> _AlgorithmParameterBoolValues;
+		
+		private EntitySet<AlgorithmParameterFloatValue> _AlgorithmParameterFloatValues;
+		
+		private EntitySet<AlgorithmParameterIntValue> _AlgorithmParameterIntValues;
+		
+		private EntitySet<AlgorithmParameterStringValue> _AlgorithmParameterStringValues;
+		
+		private EntityRef<Algorithm> _Algorithm;
+		
+		private EntityRef<DataType> _DataType;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnAlgorithmIdChanging(long value);
+    partial void OnAlgorithmIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnAliasChanging(string value);
+    partial void OnAliasChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    #endregion
+		
+		public AlgorithmParameter()
+		{
+			this._AlgorithmParameterBlobValues = new EntitySet<AlgorithmParameterBlobValue>(new Action<AlgorithmParameterBlobValue>(this.attach_AlgorithmParameterBlobValues), new Action<AlgorithmParameterBlobValue>(this.detach_AlgorithmParameterBlobValues));
+			this._AlgorithmParameterBoolValues = new EntitySet<AlgorithmParameterBoolValue>(new Action<AlgorithmParameterBoolValue>(this.attach_AlgorithmParameterBoolValues), new Action<AlgorithmParameterBoolValue>(this.detach_AlgorithmParameterBoolValues));
+			this._AlgorithmParameterFloatValues = new EntitySet<AlgorithmParameterFloatValue>(new Action<AlgorithmParameterFloatValue>(this.attach_AlgorithmParameterFloatValues), new Action<AlgorithmParameterFloatValue>(this.detach_AlgorithmParameterFloatValues));
+			this._AlgorithmParameterIntValues = new EntitySet<AlgorithmParameterIntValue>(new Action<AlgorithmParameterIntValue>(this.attach_AlgorithmParameterIntValues), new Action<AlgorithmParameterIntValue>(this.detach_AlgorithmParameterIntValues));
+			this._AlgorithmParameterStringValues = new EntitySet<AlgorithmParameterStringValue>(new Action<AlgorithmParameterStringValue>(this.attach_AlgorithmParameterStringValues), new Action<AlgorithmParameterStringValue>(this.detach_AlgorithmParameterStringValues));
+			this._Algorithm = default(EntityRef<Algorithm>);
+			this._DataType = default(EntityRef<DataType>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmId", DbType="BigInt NOT NULL")]
+		public long AlgorithmId
+		{
+			get
+			{
+				return this._AlgorithmId;
+			}
+			set
+			{
+				if ((this._AlgorithmId != value))
+				{
+					if (this._Algorithm.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmId = value;
+					this.SendPropertyChanged("AlgorithmId");
+					this.OnAlgorithmIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(200) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Alias", DbType="NVarChar(200)")]
+		public string Alias
+		{
+			get
+			{
+				return this._Alias;
+			}
+			set
+			{
+				if ((this._Alias != value))
+				{
+					this.OnAliasChanging(value);
+					this.SendPropertyChanging();
+					this._Alias = value;
+					this.SendPropertyChanged("Alias");
+					this.OnAliasChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmParameter_AlgorithmParameterBlobValue", Storage="_AlgorithmParameterBlobValues", ThisKey="Id", OtherKey="AlgorithmParameterId")]
+		public EntitySet<AlgorithmParameterBlobValue> AlgorithmParameterBlobValues
+		{
+			get
+			{
+				return this._AlgorithmParameterBlobValues;
+			}
+			set
+			{
+				this._AlgorithmParameterBlobValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmParameter_AlgorithmParameterBoolValue", Storage="_AlgorithmParameterBoolValues", ThisKey="Id", OtherKey="AlgorithmParameterId")]
+		public EntitySet<AlgorithmParameterBoolValue> AlgorithmParameterBoolValues
+		{
+			get
+			{
+				return this._AlgorithmParameterBoolValues;
+			}
+			set
+			{
+				this._AlgorithmParameterBoolValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmParameter_AlgorithmParameterFloatValue", Storage="_AlgorithmParameterFloatValues", ThisKey="Id", OtherKey="AlgorithmParameterId")]
+		public EntitySet<AlgorithmParameterFloatValue> AlgorithmParameterFloatValues
+		{
+			get
+			{
+				return this._AlgorithmParameterFloatValues;
+			}
+			set
+			{
+				this._AlgorithmParameterFloatValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmParameter_AlgorithmParameterIntValue", Storage="_AlgorithmParameterIntValues", ThisKey="Id", OtherKey="AlgorithmParameterId")]
+		public EntitySet<AlgorithmParameterIntValue> AlgorithmParameterIntValues
+		{
+			get
+			{
+				return this._AlgorithmParameterIntValues;
+			}
+			set
+			{
+				this._AlgorithmParameterIntValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmParameter_AlgorithmParameterStringValue", Storage="_AlgorithmParameterStringValues", ThisKey="Id", OtherKey="AlgorithmParameterId")]
+		public EntitySet<AlgorithmParameterStringValue> AlgorithmParameterStringValues
+		{
+			get
+			{
+				return this._AlgorithmParameterStringValues;
+			}
+			set
+			{
+				this._AlgorithmParameterStringValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_AlgorithmParameter", Storage="_Algorithm", ThisKey="AlgorithmId", OtherKey="Id", IsForeignKey=true)]
+		public Algorithm Algorithm
+		{
+			get
+			{
+				return this._Algorithm.Entity;
+			}
+			set
+			{
+				Algorithm previousValue = this._Algorithm.Entity;
+				if (((previousValue != value) 
+							|| (this._Algorithm.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Algorithm.Entity = null;
+						previousValue.AlgorithmParameters.Remove(this);
+					}
+					this._Algorithm.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameters.Add(this);
+						this._AlgorithmId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmId = default(long);
+					}
+					this.SendPropertyChanged("Algorithm");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameter", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.AlgorithmParameters.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameters.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmParameter = this;
+		}
+		
+		private void detach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmParameter = null;
+		}
+		
+		private void attach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmParameter = this;
+		}
+		
+		private void detach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmParameter = null;
+		}
+		
+		private void attach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmParameter = this;
+		}
+		
+		private void detach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmParameter = null;
+		}
+		
+		private void attach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmParameter = this;
+		}
+		
+		private void detach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmParameter = null;
+		}
+		
+		private void attach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmParameter = this;
+		}
+		
+		private void detach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.AlgorithmParameter = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ProblemParameter")]
+	public partial class ProblemParameter : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private long _ProblemId;
+		
+		private string _Name;
+		
+		private string _Alias;
+		
+		private string _Description;
+		
+		private long _DataTypeId;
+		
+		private EntitySet<ProblemParameterBlobValue> _ProblemParameterBlobValues;
+		
+		private EntitySet<ProblemParameterBoolValue> _ProblemParameterBoolValues;
+		
+		private EntitySet<ProblemParameterFloatValue> _ProblemParameterFloatValues;
+		
+		private EntitySet<ProblemParameterIntValue> _ProblemParameterIntValues;
+		
+		private EntitySet<ProblemParameterStringValue> _ProblemParameterStringValues;
+		
+		private EntityRef<Problem> _Problem;
+		
+		private EntityRef<DataType> _DataType;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnProblemIdChanging(long value);
+    partial void OnProblemIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnAliasChanging(string value);
+    partial void OnAliasChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    #endregion
+		
+		public ProblemParameter()
+		{
+			this._ProblemParameterBlobValues = new EntitySet<ProblemParameterBlobValue>(new Action<ProblemParameterBlobValue>(this.attach_ProblemParameterBlobValues), new Action<ProblemParameterBlobValue>(this.detach_ProblemParameterBlobValues));
+			this._ProblemParameterBoolValues = new EntitySet<ProblemParameterBoolValue>(new Action<ProblemParameterBoolValue>(this.attach_ProblemParameterBoolValues), new Action<ProblemParameterBoolValue>(this.detach_ProblemParameterBoolValues));
+			this._ProblemParameterFloatValues = new EntitySet<ProblemParameterFloatValue>(new Action<ProblemParameterFloatValue>(this.attach_ProblemParameterFloatValues), new Action<ProblemParameterFloatValue>(this.detach_ProblemParameterFloatValues));
+			this._ProblemParameterIntValues = new EntitySet<ProblemParameterIntValue>(new Action<ProblemParameterIntValue>(this.attach_ProblemParameterIntValues), new Action<ProblemParameterIntValue>(this.detach_ProblemParameterIntValues));
+			this._ProblemParameterStringValues = new EntitySet<ProblemParameterStringValue>(new Action<ProblemParameterStringValue>(this.attach_ProblemParameterStringValues), new Action<ProblemParameterStringValue>(this.detach_ProblemParameterStringValues));
+			this._Problem = default(EntityRef<Problem>);
+			this._DataType = default(EntityRef<DataType>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemId", DbType="BigInt NOT NULL")]
+		public long ProblemId
+		{
+			get
+			{
+				return this._ProblemId;
+			}
+			set
+			{
+				if ((this._ProblemId != value))
+				{
+					if (this._Problem.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemId = value;
+					this.SendPropertyChanged("ProblemId");
+					this.OnProblemIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(200) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Alias", DbType="NVarChar(200)")]
+		public string Alias
+		{
+			get
+			{
+				return this._Alias;
+			}
+			set
+			{
+				if ((this._Alias != value))
+				{
+					this.OnAliasChanging(value);
+					this.SendPropertyChanging();
+					this._Alias = value;
+					this.SendPropertyChanged("Alias");
+					this.OnAliasChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemParameter_ProblemParameterBlobValue", Storage="_ProblemParameterBlobValues", ThisKey="Id", OtherKey="ProblemParameterId")]
+		public EntitySet<ProblemParameterBlobValue> ProblemParameterBlobValues
+		{
+			get
+			{
+				return this._ProblemParameterBlobValues;
+			}
+			set
+			{
+				this._ProblemParameterBlobValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemParameter_ProblemParameterBoolValue", Storage="_ProblemParameterBoolValues", ThisKey="Id", OtherKey="ProblemParameterId")]
+		public EntitySet<ProblemParameterBoolValue> ProblemParameterBoolValues
+		{
+			get
+			{
+				return this._ProblemParameterBoolValues;
+			}
+			set
+			{
+				this._ProblemParameterBoolValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemParameter_ProblemParameterFloatValue", Storage="_ProblemParameterFloatValues", ThisKey="Id", OtherKey="ProblemParameterId")]
+		public EntitySet<ProblemParameterFloatValue> ProblemParameterFloatValues
+		{
+			get
+			{
+				return this._ProblemParameterFloatValues;
+			}
+			set
+			{
+				this._ProblemParameterFloatValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemParameter_ProblemParameterIntValue", Storage="_ProblemParameterIntValues", ThisKey="Id", OtherKey="ProblemParameterId")]
+		public EntitySet<ProblemParameterIntValue> ProblemParameterIntValues
+		{
+			get
+			{
+				return this._ProblemParameterIntValues;
+			}
+			set
+			{
+				this._ProblemParameterIntValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemParameter_ProblemParameterStringValue", Storage="_ProblemParameterStringValues", ThisKey="Id", OtherKey="ProblemParameterId")]
+		public EntitySet<ProblemParameterStringValue> ProblemParameterStringValues
+		{
+			get
+			{
+				return this._ProblemParameterStringValues;
+			}
+			set
+			{
+				this._ProblemParameterStringValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Problem_ProblemParameter", Storage="_Problem", ThisKey="ProblemId", OtherKey="Id", IsForeignKey=true)]
+		public Problem Problem
+		{
+			get
+			{
+				return this._Problem.Entity;
+			}
+			set
+			{
+				Problem previousValue = this._Problem.Entity;
+				if (((previousValue != value) 
+							|| (this._Problem.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Problem.Entity = null;
+						previousValue.ProblemParameters.Remove(this);
+					}
+					this._Problem.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameters.Add(this);
+						this._ProblemId = value.Id;
+					}
+					else
+					{
+						this._ProblemId = default(long);
+					}
+					this.SendPropertyChanged("Problem");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameter", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ProblemParameters.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameters.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemParameter = this;
+		}
+		
+		private void detach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemParameter = null;
+		}
+		
+		private void attach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemParameter = this;
+		}
+		
+		private void detach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemParameter = null;
+		}
+		
+		private void attach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemParameter = this;
+		}
+		
+		private void detach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemParameter = null;
+		}
+		
+		private void attach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemParameter = this;
+		}
+		
+		private void detach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemParameter = null;
+		}
+		
+		private void attach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemParameter = this;
+		}
+		
+		private void detach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.ProblemParameter = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AlgorithmUser")]
+	public partial class AlgorithmUser : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _AlgorithmId;
+		
+		private System.Guid _UserId;
+		
+		private EntityRef<Algorithm> _Algorithm;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnAlgorithmIdChanging(long value);
+    partial void OnAlgorithmIdChanged();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    #endregion
+		
+		public AlgorithmUser()
+		{
+			this._Algorithm = default(EntityRef<Algorithm>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long AlgorithmId
+		{
+			get
+			{
+				return this._AlgorithmId;
+			}
+			set
+			{
+				if ((this._AlgorithmId != value))
+				{
+					if (this._Algorithm.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmId = value;
+					this.SendPropertyChanged("AlgorithmId");
+					this.OnAlgorithmIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_AlgorithmUser", Storage="_Algorithm", ThisKey="AlgorithmId", OtherKey="Id", IsForeignKey=true)]
+		public Algorithm Algorithm
+		{
+			get
+			{
+				return this._Algorithm.Entity;
+			}
+			set
+			{
+				Algorithm previousValue = this._Algorithm.Entity;
+				if (((previousValue != value) 
+							|| (this._Algorithm.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Algorithm.Entity = null;
+						previousValue.AlgorithmUsers.Remove(this);
+					}
+					this._Algorithm.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmUsers.Add(this);
+						this._AlgorithmId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmId = default(long);
+					}
+					this.SendPropertyChanged("Algorithm");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ProblemUser")]
+	public partial class ProblemUser : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ProblemId;
+		
+		private System.Guid _UserId;
+		
+		private EntityRef<Problem> _Problem;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProblemIdChanging(long value);
+    partial void OnProblemIdChanged();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    #endregion
+		
+		public ProblemUser()
+		{
+			this._Problem = default(EntityRef<Problem>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ProblemId
+		{
+			get
+			{
+				return this._ProblemId;
+			}
+			set
+			{
+				if ((this._ProblemId != value))
+				{
+					if (this._Problem.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemId = value;
+					this.SendPropertyChanged("ProblemId");
+					this.OnProblemIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Problem_ProblemUser", Storage="_Problem", ThisKey="ProblemId", OtherKey="Id", IsForeignKey=true)]
+		public Problem Problem
+		{
+			get
+			{
+				return this._Problem.Entity;
+			}
+			set
+			{
+				Problem previousValue = this._Problem.Entity;
+				if (((previousValue != value) 
+							|| (this._Problem.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Problem.Entity = null;
+						previousValue.ProblemUsers.Remove(this);
+					}
+					this._Problem.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemUsers.Add(this);
+						this._ProblemId = value.Id;
+					}
+					else
+					{
+						this._ProblemId = default(long);
+					}
+					this.SendPropertyChanged("Problem");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Platform")]
+	public partial class Platform : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private string _Name;
+		
+		private string _Description;
+		
+		private EntitySet<Algorithm> _Algorithms;
+		
+		private EntitySet<Problem> _Problems;
+		
+		private EntitySet<DataType> _DataTypes;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    #endregion
+		
+		public Platform()
+		{
+			this._Algorithms = new EntitySet<Algorithm>(new Action<Algorithm>(this.attach_Algorithms), new Action<Algorithm>(this.detach_Algorithms));
+			this._Problems = new EntitySet<Problem>(new Action<Problem>(this.attach_Problems), new Action<Problem>(this.detach_Problems));
+			this._DataTypes = new EntitySet<DataType>(new Action<DataType>(this.attach_DataTypes), new Action<DataType>(this.detach_DataTypes));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(200) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Platform_Algorithm", Storage="_Algorithms", ThisKey="Id", OtherKey="PlatformId")]
+		public EntitySet<Algorithm> Algorithms
+		{
+			get
+			{
+				return this._Algorithms;
+			}
+			set
+			{
+				this._Algorithms.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Platform_Problem", Storage="_Problems", ThisKey="Id", OtherKey="PlatformId")]
+		public EntitySet<Problem> Problems
+		{
+			get
+			{
+				return this._Problems;
+			}
+			set
+			{
+				this._Problems.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Platform_DataType", Storage="_DataTypes", ThisKey="Id", OtherKey="PlatformId")]
+		public EntitySet<DataType> DataTypes
+		{
+			get
+			{
+				return this._DataTypes;
+			}
+			set
+			{
+				this._DataTypes.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Algorithms(Algorithm entity)
+		{
+			this.SendPropertyChanging();
+			entity.Platform = this;
+		}
+		
+		private void detach_Algorithms(Algorithm entity)
+		{
+			this.SendPropertyChanging();
+			entity.Platform = null;
+		}
+		
+		private void attach_Problems(Problem entity)
+		{
+			this.SendPropertyChanging();
+			entity.Platform = this;
+		}
+		
+		private void detach_Problems(Problem entity)
+		{
+			this.SendPropertyChanging();
+			entity.Platform = null;
+		}
+		
+		private void attach_DataTypes(DataType entity)
+		{
+			this.SendPropertyChanging();
+			entity.Platform = this;
+		}
+		
+		private void detach_DataTypes(DataType entity)
+		{
+			this.SendPropertyChanging();
+			entity.Platform = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Run")]
+	public partial class Run : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private long _ExperimentId;
+		
+		private long _RandomSeed;
+		
+		private System.DateTime _CreatedDate;
+		
+		private System.Guid _UserId;
+		
+		private System.Guid _ClientId;
+		
+		private EntitySet<ResultBlobValue> _ResultBlobValues;
+		
+		private EntitySet<ResultBoolValue> _ResultBoolValues;
+		
+		private EntitySet<ResultFloatValue> _ResultFloatValues;
+		
+		private EntitySet<ResultIntValue> _ResultIntValues;
+		
+		private EntitySet<ResultStringValue> _ResultStringValues;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnRandomSeedChanging(long value);
+    partial void OnRandomSeedChanged();
+    partial void OnCreatedDateChanging(System.DateTime value);
+    partial void OnCreatedDateChanged();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    partial void OnClientIdChanging(System.Guid value);
+    partial void OnClientIdChanged();
+    #endregion
+		
+		public Run()
+		{
+			this._ResultBlobValues = new EntitySet<ResultBlobValue>(new Action<ResultBlobValue>(this.attach_ResultBlobValues), new Action<ResultBlobValue>(this.detach_ResultBlobValues));
+			this._ResultBoolValues = new EntitySet<ResultBoolValue>(new Action<ResultBoolValue>(this.attach_ResultBoolValues), new Action<ResultBoolValue>(this.detach_ResultBoolValues));
+			this._ResultFloatValues = new EntitySet<ResultFloatValue>(new Action<ResultFloatValue>(this.attach_ResultFloatValues), new Action<ResultFloatValue>(this.detach_ResultFloatValues));
+			this._ResultIntValues = new EntitySet<ResultIntValue>(new Action<ResultIntValue>(this.attach_ResultIntValues), new Action<ResultIntValue>(this.detach_ResultIntValues));
+			this._ResultStringValues = new EntitySet<ResultStringValue>(new Action<ResultStringValue>(this.attach_ResultStringValues), new Action<ResultStringValue>(this.detach_ResultStringValues));
+			this._Experiment = default(EntityRef<Experiment>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL")]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RandomSeed", DbType="BigInt NOT NULL")]
+		public long RandomSeed
+		{
+			get
+			{
+				return this._RandomSeed;
+			}
+			set
+			{
+				if ((this._RandomSeed != value))
+				{
+					this.OnRandomSeedChanging(value);
+					this.SendPropertyChanging();
+					this._RandomSeed = value;
+					this.SendPropertyChanged("RandomSeed");
+					this.OnRandomSeedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CreatedDate", DbType="DateTime2")]
+		public System.DateTime CreatedDate
+		{
+			get
+			{
+				return this._CreatedDate;
+			}
+			set
+			{
+				if ((this._CreatedDate != value))
+				{
+					this.OnCreatedDateChanging(value);
+					this.SendPropertyChanging();
+					this._CreatedDate = value;
+					this.SendPropertyChanged("CreatedDate");
+					this.OnCreatedDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ClientId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ClientId
+		{
+			get
+			{
+				return this._ClientId;
+			}
+			set
+			{
+				if ((this._ClientId != value))
+				{
+					this.OnClientIdChanging(value);
+					this.SendPropertyChanging();
+					this._ClientId = value;
+					this.SendPropertyChanged("ClientId");
+					this.OnClientIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_ResultBlobValue", Storage="_ResultBlobValues", ThisKey="Id", OtherKey="RunId")]
+		public EntitySet<ResultBlobValue> ResultBlobValues
+		{
+			get
+			{
+				return this._ResultBlobValues;
+			}
+			set
+			{
+				this._ResultBlobValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_ResultBoolValue", Storage="_ResultBoolValues", ThisKey="Id", OtherKey="RunId")]
+		public EntitySet<ResultBoolValue> ResultBoolValues
+		{
+			get
+			{
+				return this._ResultBoolValues;
+			}
+			set
+			{
+				this._ResultBoolValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_ResultFloatValue", Storage="_ResultFloatValues", ThisKey="Id", OtherKey="RunId")]
+		public EntitySet<ResultFloatValue> ResultFloatValues
+		{
+			get
+			{
+				return this._ResultFloatValues;
+			}
+			set
+			{
+				this._ResultFloatValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_ResultIntValue", Storage="_ResultIntValues", ThisKey="Id", OtherKey="RunId")]
+		public EntitySet<ResultIntValue> ResultIntValues
+		{
+			get
+			{
+				return this._ResultIntValues;
+			}
+			set
+			{
+				this._ResultIntValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_ResultStringValue", Storage="_ResultStringValues", ThisKey="Id", OtherKey="RunId")]
+		public EntitySet<ResultStringValue> ResultStringValues
+		{
+			get
+			{
+				return this._ResultStringValues;
+			}
+			set
+			{
+				this._ResultStringValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_Run", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.Runs.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.Runs.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_ResultBlobValues(ResultBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_ResultBlobValues(ResultBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = null;
+		}
+		
+		private void attach_ResultBoolValues(ResultBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_ResultBoolValues(ResultBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = null;
+		}
+		
+		private void attach_ResultFloatValues(ResultFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_ResultFloatValues(ResultFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = null;
+		}
+		
+		private void attach_ResultIntValues(ResultIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_ResultIntValues(ResultIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = null;
+		}
+		
+		private void attach_ResultStringValues(ResultStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_ResultStringValues(ResultStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Result")]
+	public partial class Result : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private long _AlgorithmId;
+		
+		private string _Name;
+		
+		private string _Alias;
+		
+		private string _Description;
+		
+		private long _DataTypeId;
+		
+		private EntitySet<ResultBlobValue> _ResultBlobValues;
+		
+		private EntitySet<ResultBoolValue> _ResultBoolValues;
+		
+		private EntitySet<ResultFloatValue> _ResultFloatValues;
+		
+		private EntitySet<ResultIntValue> _ResultIntValues;
+		
+		private EntitySet<ResultStringValue> _ResultStringValues;
+		
+		private EntityRef<Algorithm> _Algorithm;
+		
+		private EntityRef<DataType> _DataType;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnAlgorithmIdChanging(long value);
+    partial void OnAlgorithmIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnAliasChanging(string value);
+    partial void OnAliasChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    #endregion
+		
+		public Result()
+		{
+			this._ResultBlobValues = new EntitySet<ResultBlobValue>(new Action<ResultBlobValue>(this.attach_ResultBlobValues), new Action<ResultBlobValue>(this.detach_ResultBlobValues));
+			this._ResultBoolValues = new EntitySet<ResultBoolValue>(new Action<ResultBoolValue>(this.attach_ResultBoolValues), new Action<ResultBoolValue>(this.detach_ResultBoolValues));
+			this._ResultFloatValues = new EntitySet<ResultFloatValue>(new Action<ResultFloatValue>(this.attach_ResultFloatValues), new Action<ResultFloatValue>(this.detach_ResultFloatValues));
+			this._ResultIntValues = new EntitySet<ResultIntValue>(new Action<ResultIntValue>(this.attach_ResultIntValues), new Action<ResultIntValue>(this.detach_ResultIntValues));
+			this._ResultStringValues = new EntitySet<ResultStringValue>(new Action<ResultStringValue>(this.attach_ResultStringValues), new Action<ResultStringValue>(this.detach_ResultStringValues));
+			this._Algorithm = default(EntityRef<Algorithm>);
+			this._DataType = default(EntityRef<DataType>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmId", DbType="BigInt NOT NULL")]
+		public long AlgorithmId
+		{
+			get
+			{
+				return this._AlgorithmId;
+			}
+			set
+			{
+				if ((this._AlgorithmId != value))
+				{
+					if (this._Algorithm.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmId = value;
+					this.SendPropertyChanged("AlgorithmId");
+					this.OnAlgorithmIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(200) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Alias", DbType="NVarChar(200)")]
+		public string Alias
+		{
+			get
+			{
+				return this._Alias;
+			}
+			set
+			{
+				if ((this._Alias != value))
+				{
+					this.OnAliasChanging(value);
+					this.SendPropertyChanging();
+					this._Alias = value;
+					this.SendPropertyChanged("Alias");
+					this.OnAliasChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Result_ResultBlobValue", Storage="_ResultBlobValues", ThisKey="Id", OtherKey="ResultId")]
+		public EntitySet<ResultBlobValue> ResultBlobValues
+		{
+			get
+			{
+				return this._ResultBlobValues;
+			}
+			set
+			{
+				this._ResultBlobValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Result_ResultBoolValue", Storage="_ResultBoolValues", ThisKey="Id", OtherKey="ResultId")]
+		public EntitySet<ResultBoolValue> ResultBoolValues
+		{
+			get
+			{
+				return this._ResultBoolValues;
+			}
+			set
+			{
+				this._ResultBoolValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Result_ResultFloatValue", Storage="_ResultFloatValues", ThisKey="Id", OtherKey="ResultId")]
+		public EntitySet<ResultFloatValue> ResultFloatValues
+		{
+			get
+			{
+				return this._ResultFloatValues;
+			}
+			set
+			{
+				this._ResultFloatValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Result_ResultIntValue", Storage="_ResultIntValues", ThisKey="Id", OtherKey="ResultId")]
+		public EntitySet<ResultIntValue> ResultIntValues
+		{
+			get
+			{
+				return this._ResultIntValues;
+			}
+			set
+			{
+				this._ResultIntValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Result_ResultStringValue", Storage="_ResultStringValues", ThisKey="Id", OtherKey="ResultId")]
+		public EntitySet<ResultStringValue> ResultStringValues
+		{
+			get
+			{
+				return this._ResultStringValues;
+			}
+			set
+			{
+				this._ResultStringValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_Result", Storage="_Algorithm", ThisKey="AlgorithmId", OtherKey="Id", IsForeignKey=true)]
+		public Algorithm Algorithm
+		{
+			get
+			{
+				return this._Algorithm.Entity;
+			}
+			set
+			{
+				Algorithm previousValue = this._Algorithm.Entity;
+				if (((previousValue != value) 
+							|| (this._Algorithm.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Algorithm.Entity = null;
+						previousValue.Results.Remove(this);
+					}
+					this._Algorithm.Entity = value;
+					if ((value != null))
+					{
+						value.Results.Add(this);
+						this._AlgorithmId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmId = default(long);
+					}
+					this.SendPropertyChanged("Algorithm");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_Result", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.Results.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.Results.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_ResultBlobValues(ResultBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Result = this;
+		}
+		
+		private void detach_ResultBlobValues(ResultBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Result = null;
+		}
+		
+		private void attach_ResultBoolValues(ResultBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Result = this;
+		}
+		
+		private void detach_ResultBoolValues(ResultBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Result = null;
+		}
+		
+		private void attach_ResultFloatValues(ResultFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Result = this;
+		}
+		
+		private void detach_ResultFloatValues(ResultFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Result = null;
+		}
+		
+		private void attach_ResultIntValues(ResultIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Result = this;
+		}
+		
+		private void detach_ResultIntValues(ResultIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Result = null;
+		}
+		
+		private void attach_ResultStringValues(ResultStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Result = this;
+		}
+		
+		private void detach_ResultStringValues(ResultStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Result = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AlgorithmParameterBlobValue")]
+	public partial class AlgorithmParameterBlobValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _AlgorithmParameterId;
+		
+		private long _ExperimentId;
+		
+		private long _DataTypeId;
+		
+		private System.Data.Linq.Binary _Value;
+		
+		private EntityRef<AlgorithmParameter> _AlgorithmParameter;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+		private EntityRef<DataType> _DataType;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnAlgorithmParameterIdChanging(long value);
+    partial void OnAlgorithmParameterIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(System.Data.Linq.Binary value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public AlgorithmParameterBlobValue()
+		{
+			this._AlgorithmParameter = default(EntityRef<AlgorithmParameter>);
+			this._Experiment = default(EntityRef<Experiment>);
+			this._DataType = default(EntityRef<DataType>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmParameterId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long AlgorithmParameterId
+		{
+			get
+			{
+				return this._AlgorithmParameterId;
+			}
+			set
+			{
+				if ((this._AlgorithmParameterId != value))
+				{
+					if (this._AlgorithmParameter.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmParameterIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmParameterId = value;
+					this.SendPropertyChanged("AlgorithmParameterId");
+					this.OnAlgorithmParameterIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		public System.Data.Linq.Binary Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmParameter_AlgorithmParameterBlobValue", Storage="_AlgorithmParameter", ThisKey="AlgorithmParameterId", OtherKey="Id", IsForeignKey=true)]
+		public AlgorithmParameter AlgorithmParameter
+		{
+			get
+			{
+				return this._AlgorithmParameter.Entity;
+			}
+			set
+			{
+				AlgorithmParameter previousValue = this._AlgorithmParameter.Entity;
+				if (((previousValue != value) 
+							|| (this._AlgorithmParameter.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._AlgorithmParameter.Entity = null;
+						previousValue.AlgorithmParameterBlobValues.Remove(this);
+					}
+					this._AlgorithmParameter.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterBlobValues.Add(this);
+						this._AlgorithmParameterId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmParameterId = default(long);
+					}
+					this.SendPropertyChanged("AlgorithmParameter");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_AlgorithmParameterBlobValue", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.AlgorithmParameterBlobValues.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterBlobValues.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameterBlobValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.AlgorithmParameterBlobValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterBlobValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.DataType")]
+	public partial class DataType : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private long _PlatformId;
+		
+		private string _Name;
+		
+		private string _TypeName;
+		
+		private string _SqlName;
+		
+		private EntitySet<AlgorithmParameter> _AlgorithmParameters;
+		
+		private EntitySet<ProblemParameter> _ProblemParameters;
+		
+		private EntitySet<Result> _Results;
+		
+		private EntitySet<AlgorithmParameterBlobValue> _AlgorithmParameterBlobValues;
+		
+		private EntitySet<AlgorithmParameterBoolValue> _AlgorithmParameterBoolValues;
+		
+		private EntitySet<AlgorithmParameterFloatValue> _AlgorithmParameterFloatValues;
+		
+		private EntitySet<AlgorithmParameterIntValue> _AlgorithmParameterIntValues;
+		
+		private EntitySet<AlgorithmParameterStringValue> _AlgorithmParameterStringValues;
+		
+		private EntitySet<ProblemParameterBlobValue> _ProblemParameterBlobValues;
+		
+		private EntitySet<ProblemParameterBoolValue> _ProblemParameterBoolValues;
+		
+		private EntitySet<ProblemParameterFloatValue> _ProblemParameterFloatValues;
+		
+		private EntitySet<ProblemParameterIntValue> _ProblemParameterIntValues;
+		
+		private EntitySet<ProblemParameterStringValue> _ProblemParameterStringValues;
+		
+		private EntitySet<ResultBlobValue> _ResultBlobValues;
+		
+		private EntitySet<ResultBoolValue> _ResultBoolValues;
+		
+		private EntitySet<ResultFloatValue> _ResultFloatValues;
+		
+		private EntitySet<ResultIntValue> _ResultIntValues;
+		
+		private EntitySet<ResultStringValue> _ResultStringValues;
+		
+		private EntitySet<AlgorithmData> _AlgorithmDatas;
+		
+		private EntitySet<ProblemData> _ProblemDatas;
+		
+		private EntityRef<Platform> _Platform;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnPlatformIdChanging(long value);
+    partial void OnPlatformIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnTypeNameChanging(string value);
+    partial void OnTypeNameChanged();
+    partial void OnSqlNameChanging(string value);
+    partial void OnSqlNameChanged();
+    #endregion
+		
+		public DataType()
+		{
+			this._AlgorithmParameters = new EntitySet<AlgorithmParameter>(new Action<AlgorithmParameter>(this.attach_AlgorithmParameters), new Action<AlgorithmParameter>(this.detach_AlgorithmParameters));
+			this._ProblemParameters = new EntitySet<ProblemParameter>(new Action<ProblemParameter>(this.attach_ProblemParameters), new Action<ProblemParameter>(this.detach_ProblemParameters));
+			this._Results = new EntitySet<Result>(new Action<Result>(this.attach_Results), new Action<Result>(this.detach_Results));
+			this._AlgorithmParameterBlobValues = new EntitySet<AlgorithmParameterBlobValue>(new Action<AlgorithmParameterBlobValue>(this.attach_AlgorithmParameterBlobValues), new Action<AlgorithmParameterBlobValue>(this.detach_AlgorithmParameterBlobValues));
+			this._AlgorithmParameterBoolValues = new EntitySet<AlgorithmParameterBoolValue>(new Action<AlgorithmParameterBoolValue>(this.attach_AlgorithmParameterBoolValues), new Action<AlgorithmParameterBoolValue>(this.detach_AlgorithmParameterBoolValues));
+			this._AlgorithmParameterFloatValues = new EntitySet<AlgorithmParameterFloatValue>(new Action<AlgorithmParameterFloatValue>(this.attach_AlgorithmParameterFloatValues), new Action<AlgorithmParameterFloatValue>(this.detach_AlgorithmParameterFloatValues));
+			this._AlgorithmParameterIntValues = new EntitySet<AlgorithmParameterIntValue>(new Action<AlgorithmParameterIntValue>(this.attach_AlgorithmParameterIntValues), new Action<AlgorithmParameterIntValue>(this.detach_AlgorithmParameterIntValues));
+			this._AlgorithmParameterStringValues = new EntitySet<AlgorithmParameterStringValue>(new Action<AlgorithmParameterStringValue>(this.attach_AlgorithmParameterStringValues), new Action<AlgorithmParameterStringValue>(this.detach_AlgorithmParameterStringValues));
+			this._ProblemParameterBlobValues = new EntitySet<ProblemParameterBlobValue>(new Action<ProblemParameterBlobValue>(this.attach_ProblemParameterBlobValues), new Action<ProblemParameterBlobValue>(this.detach_ProblemParameterBlobValues));
+			this._ProblemParameterBoolValues = new EntitySet<ProblemParameterBoolValue>(new Action<ProblemParameterBoolValue>(this.attach_ProblemParameterBoolValues), new Action<ProblemParameterBoolValue>(this.detach_ProblemParameterBoolValues));
+			this._ProblemParameterFloatValues = new EntitySet<ProblemParameterFloatValue>(new Action<ProblemParameterFloatValue>(this.attach_ProblemParameterFloatValues), new Action<ProblemParameterFloatValue>(this.detach_ProblemParameterFloatValues));
+			this._ProblemParameterIntValues = new EntitySet<ProblemParameterIntValue>(new Action<ProblemParameterIntValue>(this.attach_ProblemParameterIntValues), new Action<ProblemParameterIntValue>(this.detach_ProblemParameterIntValues));
+			this._ProblemParameterStringValues = new EntitySet<ProblemParameterStringValue>(new Action<ProblemParameterStringValue>(this.attach_ProblemParameterStringValues), new Action<ProblemParameterStringValue>(this.detach_ProblemParameterStringValues));
+			this._ResultBlobValues = new EntitySet<ResultBlobValue>(new Action<ResultBlobValue>(this.attach_ResultBlobValues), new Action<ResultBlobValue>(this.detach_ResultBlobValues));
+			this._ResultBoolValues = new EntitySet<ResultBoolValue>(new Action<ResultBoolValue>(this.attach_ResultBoolValues), new Action<ResultBoolValue>(this.detach_ResultBoolValues));
+			this._ResultFloatValues = new EntitySet<ResultFloatValue>(new Action<ResultFloatValue>(this.attach_ResultFloatValues), new Action<ResultFloatValue>(this.detach_ResultFloatValues));
+			this._ResultIntValues = new EntitySet<ResultIntValue>(new Action<ResultIntValue>(this.attach_ResultIntValues), new Action<ResultIntValue>(this.detach_ResultIntValues));
+			this._ResultStringValues = new EntitySet<ResultStringValue>(new Action<ResultStringValue>(this.attach_ResultStringValues), new Action<ResultStringValue>(this.detach_ResultStringValues));
+			this._AlgorithmDatas = new EntitySet<AlgorithmData>(new Action<AlgorithmData>(this.attach_AlgorithmDatas), new Action<AlgorithmData>(this.detach_AlgorithmDatas));
+			this._ProblemDatas = new EntitySet<ProblemData>(new Action<ProblemData>(this.attach_ProblemDatas), new Action<ProblemData>(this.detach_ProblemDatas));
+			this._Platform = default(EntityRef<Platform>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PlatformId", DbType="BigInt NOT NULL")]
+		public long PlatformId
+		{
+			get
+			{
+				return this._PlatformId;
+			}
+			set
+			{
+				if ((this._PlatformId != value))
+				{
+					if (this._Platform.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnPlatformIdChanging(value);
+					this.SendPropertyChanging();
+					this._PlatformId = value;
+					this.SendPropertyChanged("PlatformId");
+					this.OnPlatformIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TypeName", DbType="NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		public string TypeName
+		{
+			get
+			{
+				return this._TypeName;
+			}
+			set
+			{
+				if ((this._TypeName != value))
+				{
+					this.OnTypeNameChanging(value);
+					this.SendPropertyChanging();
+					this._TypeName = value;
+					this.SendPropertyChanged("TypeName");
+					this.OnTypeNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SqlName", DbType="NVarChar(200) NOT NULL", CanBeNull=false)]
+		public string SqlName
+		{
+			get
+			{
+				return this._SqlName;
+			}
+			set
+			{
+				if ((this._SqlName != value))
+				{
+					this.OnSqlNameChanging(value);
+					this.SendPropertyChanging();
+					this._SqlName = value;
+					this.SendPropertyChanged("SqlName");
+					this.OnSqlNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameter", Storage="_AlgorithmParameters", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<AlgorithmParameter> AlgorithmParameters
+		{
+			get
+			{
+				return this._AlgorithmParameters;
+			}
+			set
+			{
+				this._AlgorithmParameters.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameter", Storage="_ProblemParameters", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ProblemParameter> ProblemParameters
+		{
+			get
+			{
+				return this._ProblemParameters;
+			}
+			set
+			{
+				this._ProblemParameters.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_Result", Storage="_Results", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<Result> Results
+		{
+			get
+			{
+				return this._Results;
+			}
+			set
+			{
+				this._Results.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameterBlobValue", Storage="_AlgorithmParameterBlobValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<AlgorithmParameterBlobValue> AlgorithmParameterBlobValues
+		{
+			get
+			{
+				return this._AlgorithmParameterBlobValues;
+			}
+			set
+			{
+				this._AlgorithmParameterBlobValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameterBoolValue", Storage="_AlgorithmParameterBoolValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<AlgorithmParameterBoolValue> AlgorithmParameterBoolValues
+		{
+			get
+			{
+				return this._AlgorithmParameterBoolValues;
+			}
+			set
+			{
+				this._AlgorithmParameterBoolValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameterFloatValue", Storage="_AlgorithmParameterFloatValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<AlgorithmParameterFloatValue> AlgorithmParameterFloatValues
+		{
+			get
+			{
+				return this._AlgorithmParameterFloatValues;
+			}
+			set
+			{
+				this._AlgorithmParameterFloatValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameterIntValue", Storage="_AlgorithmParameterIntValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<AlgorithmParameterIntValue> AlgorithmParameterIntValues
+		{
+			get
+			{
+				return this._AlgorithmParameterIntValues;
+			}
+			set
+			{
+				this._AlgorithmParameterIntValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameterStringValue", Storage="_AlgorithmParameterStringValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<AlgorithmParameterStringValue> AlgorithmParameterStringValues
+		{
+			get
+			{
+				return this._AlgorithmParameterStringValues;
+			}
+			set
+			{
+				this._AlgorithmParameterStringValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameterBlobValue", Storage="_ProblemParameterBlobValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ProblemParameterBlobValue> ProblemParameterBlobValues
+		{
+			get
+			{
+				return this._ProblemParameterBlobValues;
+			}
+			set
+			{
+				this._ProblemParameterBlobValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameterBoolValue", Storage="_ProblemParameterBoolValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ProblemParameterBoolValue> ProblemParameterBoolValues
+		{
+			get
+			{
+				return this._ProblemParameterBoolValues;
+			}
+			set
+			{
+				this._ProblemParameterBoolValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameterFloatValue", Storage="_ProblemParameterFloatValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ProblemParameterFloatValue> ProblemParameterFloatValues
+		{
+			get
+			{
+				return this._ProblemParameterFloatValues;
+			}
+			set
+			{
+				this._ProblemParameterFloatValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameterIntValue", Storage="_ProblemParameterIntValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ProblemParameterIntValue> ProblemParameterIntValues
+		{
+			get
+			{
+				return this._ProblemParameterIntValues;
+			}
+			set
+			{
+				this._ProblemParameterIntValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameterStringValue", Storage="_ProblemParameterStringValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ProblemParameterStringValue> ProblemParameterStringValues
+		{
+			get
+			{
+				return this._ProblemParameterStringValues;
+			}
+			set
+			{
+				this._ProblemParameterStringValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ResultBlobValue", Storage="_ResultBlobValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ResultBlobValue> ResultBlobValues
+		{
+			get
+			{
+				return this._ResultBlobValues;
+			}
+			set
+			{
+				this._ResultBlobValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ResultBoolValue", Storage="_ResultBoolValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ResultBoolValue> ResultBoolValues
+		{
+			get
+			{
+				return this._ResultBoolValues;
+			}
+			set
+			{
+				this._ResultBoolValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ResultFloatValue", Storage="_ResultFloatValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ResultFloatValue> ResultFloatValues
+		{
+			get
+			{
+				return this._ResultFloatValues;
+			}
+			set
+			{
+				this._ResultFloatValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ResultIntValue", Storage="_ResultIntValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ResultIntValue> ResultIntValues
+		{
+			get
+			{
+				return this._ResultIntValues;
+			}
+			set
+			{
+				this._ResultIntValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ResultStringValue", Storage="_ResultStringValues", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ResultStringValue> ResultStringValues
+		{
+			get
+			{
+				return this._ResultStringValues;
+			}
+			set
+			{
+				this._ResultStringValues.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmData", Storage="_AlgorithmDatas", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<AlgorithmData> AlgorithmDatas
+		{
+			get
+			{
+				return this._AlgorithmDatas;
+			}
+			set
+			{
+				this._AlgorithmDatas.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemData", Storage="_ProblemDatas", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<ProblemData> ProblemDatas
+		{
+			get
+			{
+				return this._ProblemDatas;
+			}
+			set
+			{
+				this._ProblemDatas.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Platform_DataType", Storage="_Platform", ThisKey="PlatformId", OtherKey="Id", IsForeignKey=true)]
+		public Platform Platform
+		{
+			get
+			{
+				return this._Platform.Entity;
+			}
+			set
+			{
+				Platform previousValue = this._Platform.Entity;
+				if (((previousValue != value) 
+							|| (this._Platform.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Platform.Entity = null;
+						previousValue.DataTypes.Remove(this);
+					}
+					this._Platform.Entity = value;
+					if ((value != null))
+					{
+						value.DataTypes.Add(this);
+						this._PlatformId = value.Id;
+					}
+					else
+					{
+						this._PlatformId = default(long);
+					}
+					this.SendPropertyChanged("Platform");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_AlgorithmParameters(AlgorithmParameter entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameters(AlgorithmParameter entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ProblemParameters(ProblemParameter entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameters(ProblemParameter entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_Results(Result entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_Results(Result entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ResultBlobValues(ResultBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ResultBlobValues(ResultBlobValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ResultBoolValues(ResultBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ResultBoolValues(ResultBoolValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ResultFloatValues(ResultFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ResultFloatValues(ResultFloatValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ResultIntValues(ResultIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ResultIntValues(ResultIntValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ResultStringValues(ResultStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ResultStringValues(ResultStringValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_AlgorithmDatas(AlgorithmData entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmDatas(AlgorithmData entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_ProblemDatas(ProblemData entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemDatas(ProblemData entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AlgorithmParameterBoolValue")]
+	public partial class AlgorithmParameterBoolValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _AlgorithmParameterId;
+		
+		private long _ExperimentId;
+		
+		private long _DataTypeId;
+		
+		private bool _Value;
+		
+		private EntityRef<AlgorithmParameter> _AlgorithmParameter;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnAlgorithmParameterIdChanging(long value);
+    partial void OnAlgorithmParameterIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(bool value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public AlgorithmParameterBoolValue()
+		{
+			this._AlgorithmParameter = default(EntityRef<AlgorithmParameter>);
+			this._DataType = default(EntityRef<DataType>);
+			this._Experiment = default(EntityRef<Experiment>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmParameterId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long AlgorithmParameterId
+		{
+			get
+			{
+				return this._AlgorithmParameterId;
+			}
+			set
+			{
+				if ((this._AlgorithmParameterId != value))
+				{
+					if (this._AlgorithmParameter.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmParameterIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmParameterId = value;
+					this.SendPropertyChanged("AlgorithmParameterId");
+					this.OnAlgorithmParameterIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="Bit NOT NULL")]
+		public bool Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmParameter_AlgorithmParameterBoolValue", Storage="_AlgorithmParameter", ThisKey="AlgorithmParameterId", OtherKey="Id", IsForeignKey=true)]
+		public AlgorithmParameter AlgorithmParameter
+		{
+			get
+			{
+				return this._AlgorithmParameter.Entity;
+			}
+			set
+			{
+				AlgorithmParameter previousValue = this._AlgorithmParameter.Entity;
+				if (((previousValue != value) 
+							|| (this._AlgorithmParameter.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._AlgorithmParameter.Entity = null;
+						previousValue.AlgorithmParameterBoolValues.Remove(this);
+					}
+					this._AlgorithmParameter.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterBoolValues.Add(this);
+						this._AlgorithmParameterId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmParameterId = default(long);
+					}
+					this.SendPropertyChanged("AlgorithmParameter");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameterBoolValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.AlgorithmParameterBoolValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterBoolValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_AlgorithmParameterBoolValue", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.AlgorithmParameterBoolValues.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterBoolValues.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AlgorithmParameterFloatValue")]
+	public partial class AlgorithmParameterFloatValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _AlgorithmParameterId;
+		
+		private long _ExperimentId;
+		
+		private long _DataTypeId;
+		
+		private double _Value;
+		
+		private EntityRef<AlgorithmParameter> _AlgorithmParameter;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnAlgorithmParameterIdChanging(long value);
+    partial void OnAlgorithmParameterIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(double value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public AlgorithmParameterFloatValue()
+		{
+			this._AlgorithmParameter = default(EntityRef<AlgorithmParameter>);
+			this._DataType = default(EntityRef<DataType>);
+			this._Experiment = default(EntityRef<Experiment>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmParameterId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long AlgorithmParameterId
+		{
+			get
+			{
+				return this._AlgorithmParameterId;
+			}
+			set
+			{
+				if ((this._AlgorithmParameterId != value))
+				{
+					if (this._AlgorithmParameter.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmParameterIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmParameterId = value;
+					this.SendPropertyChanged("AlgorithmParameterId");
+					this.OnAlgorithmParameterIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="Float NOT NULL")]
+		public double Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmParameter_AlgorithmParameterFloatValue", Storage="_AlgorithmParameter", ThisKey="AlgorithmParameterId", OtherKey="Id", IsForeignKey=true)]
+		public AlgorithmParameter AlgorithmParameter
+		{
+			get
+			{
+				return this._AlgorithmParameter.Entity;
+			}
+			set
+			{
+				AlgorithmParameter previousValue = this._AlgorithmParameter.Entity;
+				if (((previousValue != value) 
+							|| (this._AlgorithmParameter.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._AlgorithmParameter.Entity = null;
+						previousValue.AlgorithmParameterFloatValues.Remove(this);
+					}
+					this._AlgorithmParameter.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterFloatValues.Add(this);
+						this._AlgorithmParameterId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmParameterId = default(long);
+					}
+					this.SendPropertyChanged("AlgorithmParameter");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameterFloatValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.AlgorithmParameterFloatValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterFloatValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_AlgorithmParameterFloatValue", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.AlgorithmParameterFloatValues.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterFloatValues.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AlgorithmParameterIntValue")]
+	public partial class AlgorithmParameterIntValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _AlgorithmParameterId;
+		
+		private long _ExperimentId;
+		
+		private long _DataTypeId;
+		
+		private long _Value;
+		
+		private EntityRef<AlgorithmParameter> _AlgorithmParameter;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnAlgorithmParameterIdChanging(long value);
+    partial void OnAlgorithmParameterIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(long value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public AlgorithmParameterIntValue()
+		{
+			this._AlgorithmParameter = default(EntityRef<AlgorithmParameter>);
+			this._DataType = default(EntityRef<DataType>);
+			this._Experiment = default(EntityRef<Experiment>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmParameterId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long AlgorithmParameterId
+		{
+			get
+			{
+				return this._AlgorithmParameterId;
+			}
+			set
+			{
+				if ((this._AlgorithmParameterId != value))
+				{
+					if (this._AlgorithmParameter.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmParameterIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmParameterId = value;
+					this.SendPropertyChanged("AlgorithmParameterId");
+					this.OnAlgorithmParameterIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="BigInt NOT NULL")]
+		public long Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmParameter_AlgorithmParameterIntValue", Storage="_AlgorithmParameter", ThisKey="AlgorithmParameterId", OtherKey="Id", IsForeignKey=true)]
+		public AlgorithmParameter AlgorithmParameter
+		{
+			get
+			{
+				return this._AlgorithmParameter.Entity;
+			}
+			set
+			{
+				AlgorithmParameter previousValue = this._AlgorithmParameter.Entity;
+				if (((previousValue != value) 
+							|| (this._AlgorithmParameter.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._AlgorithmParameter.Entity = null;
+						previousValue.AlgorithmParameterIntValues.Remove(this);
+					}
+					this._AlgorithmParameter.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterIntValues.Add(this);
+						this._AlgorithmParameterId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmParameterId = default(long);
+					}
+					this.SendPropertyChanged("AlgorithmParameter");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameterIntValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.AlgorithmParameterIntValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterIntValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_AlgorithmParameterIntValue", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.AlgorithmParameterIntValues.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterIntValues.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AlgorithmParameterStringValue")]
+	public partial class AlgorithmParameterStringValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _AlgorithmParameterId;
+		
+		private long _ExperimentId;
+		
+		private long _DataTypeId;
+		
+		private string _Value;
+		
+		private EntityRef<AlgorithmParameter> _AlgorithmParameter;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnAlgorithmParameterIdChanging(long value);
+    partial void OnAlgorithmParameterIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(string value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public AlgorithmParameterStringValue()
+		{
+			this._AlgorithmParameter = default(EntityRef<AlgorithmParameter>);
+			this._DataType = default(EntityRef<DataType>);
+			this._Experiment = default(EntityRef<Experiment>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmParameterId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long AlgorithmParameterId
+		{
+			get
+			{
+				return this._AlgorithmParameterId;
+			}
+			set
+			{
+				if ((this._AlgorithmParameterId != value))
+				{
+					if (this._AlgorithmParameter.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmParameterIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmParameterId = value;
+					this.SendPropertyChanged("AlgorithmParameterId");
+					this.OnAlgorithmParameterIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		public string Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="AlgorithmParameter_AlgorithmParameterStringValue", Storage="_AlgorithmParameter", ThisKey="AlgorithmParameterId", OtherKey="Id", IsForeignKey=true)]
+		public AlgorithmParameter AlgorithmParameter
+		{
+			get
+			{
+				return this._AlgorithmParameter.Entity;
+			}
+			set
+			{
+				AlgorithmParameter previousValue = this._AlgorithmParameter.Entity;
+				if (((previousValue != value) 
+							|| (this._AlgorithmParameter.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._AlgorithmParameter.Entity = null;
+						previousValue.AlgorithmParameterStringValues.Remove(this);
+					}
+					this._AlgorithmParameter.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterStringValues.Add(this);
+						this._AlgorithmParameterId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmParameterId = default(long);
+					}
+					this.SendPropertyChanged("AlgorithmParameter");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmParameterStringValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.AlgorithmParameterStringValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterStringValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_AlgorithmParameterStringValue", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.AlgorithmParameterStringValues.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmParameterStringValues.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ProblemParameterBlobValue")]
+	public partial class ProblemParameterBlobValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ProblemParameterId;
+		
+		private long _ExperimentId;
+		
+		private long _DataTypeId;
+		
+		private System.Data.Linq.Binary _Value;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+		private EntityRef<ProblemParameter> _ProblemParameter;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProblemParameterIdChanging(long value);
+    partial void OnProblemParameterIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(System.Data.Linq.Binary value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public ProblemParameterBlobValue()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Experiment = default(EntityRef<Experiment>);
+			this._ProblemParameter = default(EntityRef<ProblemParameter>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemParameterId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ProblemParameterId
+		{
+			get
+			{
+				return this._ProblemParameterId;
+			}
+			set
+			{
+				if ((this._ProblemParameterId != value))
+				{
+					if (this._ProblemParameter.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemParameterIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemParameterId = value;
+					this.SendPropertyChanged("ProblemParameterId");
+					this.OnProblemParameterIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		public System.Data.Linq.Binary Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameterBlobValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ProblemParameterBlobValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterBlobValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_ProblemParameterBlobValue", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.ProblemParameterBlobValues.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterBlobValues.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemParameter_ProblemParameterBlobValue", Storage="_ProblemParameter", ThisKey="ProblemParameterId", OtherKey="Id", IsForeignKey=true)]
+		public ProblemParameter ProblemParameter
+		{
+			get
+			{
+				return this._ProblemParameter.Entity;
+			}
+			set
+			{
+				ProblemParameter previousValue = this._ProblemParameter.Entity;
+				if (((previousValue != value) 
+							|| (this._ProblemParameter.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ProblemParameter.Entity = null;
+						previousValue.ProblemParameterBlobValues.Remove(this);
+					}
+					this._ProblemParameter.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterBlobValues.Add(this);
+						this._ProblemParameterId = value.Id;
+					}
+					else
+					{
+						this._ProblemParameterId = default(long);
+					}
+					this.SendPropertyChanged("ProblemParameter");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ProblemParameterBoolValue")]
+	public partial class ProblemParameterBoolValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ProblemParameterId;
+		
+		private long _ExperimentId;
+		
+		private long _DataTypeId;
+		
+		private bool _Value;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+		private EntityRef<ProblemParameter> _ProblemParameter;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProblemParameterIdChanging(long value);
+    partial void OnProblemParameterIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(bool value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public ProblemParameterBoolValue()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Experiment = default(EntityRef<Experiment>);
+			this._ProblemParameter = default(EntityRef<ProblemParameter>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemParameterId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ProblemParameterId
+		{
+			get
+			{
+				return this._ProblemParameterId;
+			}
+			set
+			{
+				if ((this._ProblemParameterId != value))
+				{
+					if (this._ProblemParameter.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemParameterIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemParameterId = value;
+					this.SendPropertyChanged("ProblemParameterId");
+					this.OnProblemParameterIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="Bit NOT NULL")]
+		public bool Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameterBoolValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ProblemParameterBoolValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterBoolValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_ProblemParameterBoolValue", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.ProblemParameterBoolValues.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterBoolValues.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemParameter_ProblemParameterBoolValue", Storage="_ProblemParameter", ThisKey="ProblemParameterId", OtherKey="Id", IsForeignKey=true)]
+		public ProblemParameter ProblemParameter
+		{
+			get
+			{
+				return this._ProblemParameter.Entity;
+			}
+			set
+			{
+				ProblemParameter previousValue = this._ProblemParameter.Entity;
+				if (((previousValue != value) 
+							|| (this._ProblemParameter.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ProblemParameter.Entity = null;
+						previousValue.ProblemParameterBoolValues.Remove(this);
+					}
+					this._ProblemParameter.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterBoolValues.Add(this);
+						this._ProblemParameterId = value.Id;
+					}
+					else
+					{
+						this._ProblemParameterId = default(long);
+					}
+					this.SendPropertyChanged("ProblemParameter");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ProblemParameterFloatValue")]
+	public partial class ProblemParameterFloatValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ProblemParameterId;
+		
+		private long _ExperimentId;
+		
+		private long _DataTypeId;
+		
+		private double _Value;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+		private EntityRef<ProblemParameter> _ProblemParameter;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProblemParameterIdChanging(long value);
+    partial void OnProblemParameterIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(double value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public ProblemParameterFloatValue()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Experiment = default(EntityRef<Experiment>);
+			this._ProblemParameter = default(EntityRef<ProblemParameter>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemParameterId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ProblemParameterId
+		{
+			get
+			{
+				return this._ProblemParameterId;
+			}
+			set
+			{
+				if ((this._ProblemParameterId != value))
+				{
+					if (this._ProblemParameter.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemParameterIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemParameterId = value;
+					this.SendPropertyChanged("ProblemParameterId");
+					this.OnProblemParameterIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="Float NOT NULL")]
+		public double Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameterFloatValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ProblemParameterFloatValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterFloatValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_ProblemParameterFloatValue", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.ProblemParameterFloatValues.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterFloatValues.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemParameter_ProblemParameterFloatValue", Storage="_ProblemParameter", ThisKey="ProblemParameterId", OtherKey="Id", IsForeignKey=true)]
+		public ProblemParameter ProblemParameter
+		{
+			get
+			{
+				return this._ProblemParameter.Entity;
+			}
+			set
+			{
+				ProblemParameter previousValue = this._ProblemParameter.Entity;
+				if (((previousValue != value) 
+							|| (this._ProblemParameter.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ProblemParameter.Entity = null;
+						previousValue.ProblemParameterFloatValues.Remove(this);
+					}
+					this._ProblemParameter.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterFloatValues.Add(this);
+						this._ProblemParameterId = value.Id;
+					}
+					else
+					{
+						this._ProblemParameterId = default(long);
+					}
+					this.SendPropertyChanged("ProblemParameter");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ProblemParameterIntValue")]
+	public partial class ProblemParameterIntValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ProblemParameterId;
+		
+		private long _ExperimentId;
+		
+		private long _DataTypeId;
+		
+		private long _Value;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+		private EntityRef<ProblemParameter> _ProblemParameter;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProblemParameterIdChanging(long value);
+    partial void OnProblemParameterIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(long value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public ProblemParameterIntValue()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Experiment = default(EntityRef<Experiment>);
+			this._ProblemParameter = default(EntityRef<ProblemParameter>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemParameterId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ProblemParameterId
+		{
+			get
+			{
+				return this._ProblemParameterId;
+			}
+			set
+			{
+				if ((this._ProblemParameterId != value))
+				{
+					if (this._ProblemParameter.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemParameterIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemParameterId = value;
+					this.SendPropertyChanged("ProblemParameterId");
+					this.OnProblemParameterIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="BigInt NOT NULL")]
+		public long Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameterIntValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ProblemParameterIntValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterIntValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_ProblemParameterIntValue", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.ProblemParameterIntValues.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterIntValues.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemParameter_ProblemParameterIntValue", Storage="_ProblemParameter", ThisKey="ProblemParameterId", OtherKey="Id", IsForeignKey=true)]
+		public ProblemParameter ProblemParameter
+		{
+			get
+			{
+				return this._ProblemParameter.Entity;
+			}
+			set
+			{
+				ProblemParameter previousValue = this._ProblemParameter.Entity;
+				if (((previousValue != value) 
+							|| (this._ProblemParameter.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ProblemParameter.Entity = null;
+						previousValue.ProblemParameterIntValues.Remove(this);
+					}
+					this._ProblemParameter.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterIntValues.Add(this);
+						this._ProblemParameterId = value.Id;
+					}
+					else
+					{
+						this._ProblemParameterId = default(long);
+					}
+					this.SendPropertyChanged("ProblemParameter");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ProblemParameterStringValue")]
+	public partial class ProblemParameterStringValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ProblemParameterId;
+		
+		private long _ExperimentId;
+		
+		private long _DataTypeId;
+		
+		private string _Value;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Experiment> _Experiment;
+		
+		private EntityRef<ProblemParameter> _ProblemParameter;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProblemParameterIdChanging(long value);
+    partial void OnProblemParameterIdChanged();
+    partial void OnExperimentIdChanging(long value);
+    partial void OnExperimentIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(string value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public ProblemParameterStringValue()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Experiment = default(EntityRef<Experiment>);
+			this._ProblemParameter = default(EntityRef<ProblemParameter>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemParameterId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ProblemParameterId
+		{
+			get
+			{
+				return this._ProblemParameterId;
+			}
+			set
+			{
+				if ((this._ProblemParameterId != value))
+				{
+					if (this._ProblemParameter.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemParameterIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemParameterId = value;
+					this.SendPropertyChanged("ProblemParameterId");
+					this.OnProblemParameterIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExperimentId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ExperimentId
+		{
+			get
+			{
+				return this._ExperimentId;
+			}
+			set
+			{
+				if ((this._ExperimentId != value))
+				{
+					if (this._Experiment.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._ExperimentId = value;
+					this.SendPropertyChanged("ExperimentId");
+					this.OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		public string Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemParameterStringValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ProblemParameterStringValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterStringValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Experiment_ProblemParameterStringValue", Storage="_Experiment", ThisKey="ExperimentId", OtherKey="Id", IsForeignKey=true)]
+		public Experiment Experiment
+		{
+			get
+			{
+				return this._Experiment.Entity;
+			}
+			set
+			{
+				Experiment previousValue = this._Experiment.Entity;
+				if (((previousValue != value) 
+							|| (this._Experiment.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Experiment.Entity = null;
+						previousValue.ProblemParameterStringValues.Remove(this);
+					}
+					this._Experiment.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterStringValues.Add(this);
+						this._ExperimentId = value.Id;
+					}
+					else
+					{
+						this._ExperimentId = default(long);
+					}
+					this.SendPropertyChanged("Experiment");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="ProblemParameter_ProblemParameterStringValue", Storage="_ProblemParameter", ThisKey="ProblemParameterId", OtherKey="Id", IsForeignKey=true)]
+		public ProblemParameter ProblemParameter
+		{
+			get
+			{
+				return this._ProblemParameter.Entity;
+			}
+			set
+			{
+				ProblemParameter previousValue = this._ProblemParameter.Entity;
+				if (((previousValue != value) 
+							|| (this._ProblemParameter.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ProblemParameter.Entity = null;
+						previousValue.ProblemParameterStringValues.Remove(this);
+					}
+					this._ProblemParameter.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemParameterStringValues.Add(this);
+						this._ProblemParameterId = value.Id;
+					}
+					else
+					{
+						this._ProblemParameterId = default(long);
+					}
+					this.SendPropertyChanged("ProblemParameter");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ResultBlobValue")]
+	public partial class ResultBlobValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ResultId;
+		
+		private long _RunId;
+		
+		private long _DataTypeId;
+		
+		private System.Data.Linq.Binary _Value;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Result> _Result;
+		
+		private EntityRef<Run> _Run;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResultIdChanging(long value);
+    partial void OnResultIdChanged();
+    partial void OnRunIdChanging(long value);
+    partial void OnRunIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(System.Data.Linq.Binary value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public ResultBlobValue()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Result = default(EntityRef<Result>);
+			this._Run = default(EntityRef<Run>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResultId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ResultId
+		{
+			get
+			{
+				return this._ResultId;
+			}
+			set
+			{
+				if ((this._ResultId != value))
+				{
+					if (this._Result.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResultIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResultId = value;
+					this.SendPropertyChanged("ResultId");
+					this.OnResultIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RunId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long RunId
+		{
+			get
+			{
+				return this._RunId;
+			}
+			set
+			{
+				if ((this._RunId != value))
+				{
+					if (this._Run.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnRunIdChanging(value);
+					this.SendPropertyChanging();
+					this._RunId = value;
+					this.SendPropertyChanged("RunId");
+					this.OnRunIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		public System.Data.Linq.Binary Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ResultBlobValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ResultBlobValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ResultBlobValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Result_ResultBlobValue", Storage="_Result", ThisKey="ResultId", OtherKey="Id", IsForeignKey=true)]
+		public Result Result
+		{
+			get
+			{
+				return this._Result.Entity;
+			}
+			set
+			{
+				Result previousValue = this._Result.Entity;
+				if (((previousValue != value) 
+							|| (this._Result.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Result.Entity = null;
+						previousValue.ResultBlobValues.Remove(this);
+					}
+					this._Result.Entity = value;
+					if ((value != null))
+					{
+						value.ResultBlobValues.Add(this);
+						this._ResultId = value.Id;
+					}
+					else
+					{
+						this._ResultId = default(long);
+					}
+					this.SendPropertyChanged("Result");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_ResultBlobValue", Storage="_Run", ThisKey="RunId", OtherKey="Id", IsForeignKey=true)]
+		public Run Run
+		{
+			get
+			{
+				return this._Run.Entity;
+			}
+			set
+			{
+				Run previousValue = this._Run.Entity;
+				if (((previousValue != value) 
+							|| (this._Run.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Run.Entity = null;
+						previousValue.ResultBlobValues.Remove(this);
+					}
+					this._Run.Entity = value;
+					if ((value != null))
+					{
+						value.ResultBlobValues.Add(this);
+						this._RunId = value.Id;
+					}
+					else
+					{
+						this._RunId = default(long);
+					}
+					this.SendPropertyChanged("Run");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ResultBoolValue")]
+	public partial class ResultBoolValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ResultId;
+		
+		private long _RunId;
+		
+		private long _DataTypeId;
+		
+		private bool _Value;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Result> _Result;
+		
+		private EntityRef<Run> _Run;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResultIdChanging(long value);
+    partial void OnResultIdChanged();
+    partial void OnRunIdChanging(long value);
+    partial void OnRunIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(bool value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public ResultBoolValue()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Result = default(EntityRef<Result>);
+			this._Run = default(EntityRef<Run>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResultId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ResultId
+		{
+			get
+			{
+				return this._ResultId;
+			}
+			set
+			{
+				if ((this._ResultId != value))
+				{
+					if (this._Result.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResultIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResultId = value;
+					this.SendPropertyChanged("ResultId");
+					this.OnResultIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RunId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long RunId
+		{
+			get
+			{
+				return this._RunId;
+			}
+			set
+			{
+				if ((this._RunId != value))
+				{
+					if (this._Run.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnRunIdChanging(value);
+					this.SendPropertyChanging();
+					this._RunId = value;
+					this.SendPropertyChanged("RunId");
+					this.OnRunIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="Bit NOT NULL")]
+		public bool Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ResultBoolValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ResultBoolValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ResultBoolValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Result_ResultBoolValue", Storage="_Result", ThisKey="ResultId", OtherKey="Id", IsForeignKey=true)]
+		public Result Result
+		{
+			get
+			{
+				return this._Result.Entity;
+			}
+			set
+			{
+				Result previousValue = this._Result.Entity;
+				if (((previousValue != value) 
+							|| (this._Result.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Result.Entity = null;
+						previousValue.ResultBoolValues.Remove(this);
+					}
+					this._Result.Entity = value;
+					if ((value != null))
+					{
+						value.ResultBoolValues.Add(this);
+						this._ResultId = value.Id;
+					}
+					else
+					{
+						this._ResultId = default(long);
+					}
+					this.SendPropertyChanged("Result");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_ResultBoolValue", Storage="_Run", ThisKey="RunId", OtherKey="Id", IsForeignKey=true)]
+		public Run Run
+		{
+			get
+			{
+				return this._Run.Entity;
+			}
+			set
+			{
+				Run previousValue = this._Run.Entity;
+				if (((previousValue != value) 
+							|| (this._Run.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Run.Entity = null;
+						previousValue.ResultBoolValues.Remove(this);
+					}
+					this._Run.Entity = value;
+					if ((value != null))
+					{
+						value.ResultBoolValues.Add(this);
+						this._RunId = value.Id;
+					}
+					else
+					{
+						this._RunId = default(long);
+					}
+					this.SendPropertyChanged("Run");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ResultFloatValue")]
+	public partial class ResultFloatValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ResultId;
+		
+		private long _RunId;
+		
+		private long _DataTypeId;
+		
+		private double _Value;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Result> _Result;
+		
+		private EntityRef<Run> _Run;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResultIdChanging(long value);
+    partial void OnResultIdChanged();
+    partial void OnRunIdChanging(long value);
+    partial void OnRunIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(double value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public ResultFloatValue()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Result = default(EntityRef<Result>);
+			this._Run = default(EntityRef<Run>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResultId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ResultId
+		{
+			get
+			{
+				return this._ResultId;
+			}
+			set
+			{
+				if ((this._ResultId != value))
+				{
+					if (this._Result.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResultIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResultId = value;
+					this.SendPropertyChanged("ResultId");
+					this.OnResultIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RunId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long RunId
+		{
+			get
+			{
+				return this._RunId;
+			}
+			set
+			{
+				if ((this._RunId != value))
+				{
+					if (this._Run.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnRunIdChanging(value);
+					this.SendPropertyChanging();
+					this._RunId = value;
+					this.SendPropertyChanged("RunId");
+					this.OnRunIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="Float NOT NULL")]
+		public double Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ResultFloatValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ResultFloatValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ResultFloatValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Result_ResultFloatValue", Storage="_Result", ThisKey="ResultId", OtherKey="Id", IsForeignKey=true)]
+		public Result Result
+		{
+			get
+			{
+				return this._Result.Entity;
+			}
+			set
+			{
+				Result previousValue = this._Result.Entity;
+				if (((previousValue != value) 
+							|| (this._Result.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Result.Entity = null;
+						previousValue.ResultFloatValues.Remove(this);
+					}
+					this._Result.Entity = value;
+					if ((value != null))
+					{
+						value.ResultFloatValues.Add(this);
+						this._ResultId = value.Id;
+					}
+					else
+					{
+						this._ResultId = default(long);
+					}
+					this.SendPropertyChanged("Result");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_ResultFloatValue", Storage="_Run", ThisKey="RunId", OtherKey="Id", IsForeignKey=true)]
+		public Run Run
+		{
+			get
+			{
+				return this._Run.Entity;
+			}
+			set
+			{
+				Run previousValue = this._Run.Entity;
+				if (((previousValue != value) 
+							|| (this._Run.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Run.Entity = null;
+						previousValue.ResultFloatValues.Remove(this);
+					}
+					this._Run.Entity = value;
+					if ((value != null))
+					{
+						value.ResultFloatValues.Add(this);
+						this._RunId = value.Id;
+					}
+					else
+					{
+						this._RunId = default(long);
+					}
+					this.SendPropertyChanged("Run");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ResultIntValue")]
+	public partial class ResultIntValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ResultId;
+		
+		private long _RunId;
+		
+		private long _DataTypeId;
+		
+		private long _Value;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Result> _Result;
+		
+		private EntityRef<Run> _Run;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResultIdChanging(long value);
+    partial void OnResultIdChanged();
+    partial void OnRunIdChanging(long value);
+    partial void OnRunIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(long value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public ResultIntValue()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Result = default(EntityRef<Result>);
+			this._Run = default(EntityRef<Run>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResultId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ResultId
+		{
+			get
+			{
+				return this._ResultId;
+			}
+			set
+			{
+				if ((this._ResultId != value))
+				{
+					if (this._Result.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResultIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResultId = value;
+					this.SendPropertyChanged("ResultId");
+					this.OnResultIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RunId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long RunId
+		{
+			get
+			{
+				return this._RunId;
+			}
+			set
+			{
+				if ((this._RunId != value))
+				{
+					if (this._Run.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnRunIdChanging(value);
+					this.SendPropertyChanging();
+					this._RunId = value;
+					this.SendPropertyChanged("RunId");
+					this.OnRunIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="BigInt NOT NULL")]
+		public long Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ResultIntValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ResultIntValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ResultIntValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Result_ResultIntValue", Storage="_Result", ThisKey="ResultId", OtherKey="Id", IsForeignKey=true)]
+		public Result Result
+		{
+			get
+			{
+				return this._Result.Entity;
+			}
+			set
+			{
+				Result previousValue = this._Result.Entity;
+				if (((previousValue != value) 
+							|| (this._Result.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Result.Entity = null;
+						previousValue.ResultIntValues.Remove(this);
+					}
+					this._Result.Entity = value;
+					if ((value != null))
+					{
+						value.ResultIntValues.Add(this);
+						this._ResultId = value.Id;
+					}
+					else
+					{
+						this._ResultId = default(long);
+					}
+					this.SendPropertyChanged("Result");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_ResultIntValue", Storage="_Run", ThisKey="RunId", OtherKey="Id", IsForeignKey=true)]
+		public Run Run
+		{
+			get
+			{
+				return this._Run.Entity;
+			}
+			set
+			{
+				Run previousValue = this._Run.Entity;
+				if (((previousValue != value) 
+							|| (this._Run.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Run.Entity = null;
+						previousValue.ResultIntValues.Remove(this);
+					}
+					this._Run.Entity = value;
+					if ((value != null))
+					{
+						value.ResultIntValues.Add(this);
+						this._RunId = value.Id;
+					}
+					else
+					{
+						this._RunId = default(long);
+					}
+					this.SendPropertyChanged("Run");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ResultStringValue")]
+	public partial class ResultStringValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ResultId;
+		
+		private long _RunId;
+		
+		private long _DataTypeId;
+		
+		private string _Value;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Result> _Result;
+		
+		private EntityRef<Run> _Run;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResultIdChanging(long value);
+    partial void OnResultIdChanged();
+    partial void OnRunIdChanging(long value);
+    partial void OnRunIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnValueChanging(string value);
+    partial void OnValueChanged();
+    #endregion
+		
+		public ResultStringValue()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Result = default(EntityRef<Result>);
+			this._Run = default(EntityRef<Run>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResultId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ResultId
+		{
+			get
+			{
+				return this._ResultId;
+			}
+			set
+			{
+				if ((this._ResultId != value))
+				{
+					if (this._Result.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResultIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResultId = value;
+					this.SendPropertyChanged("ResultId");
+					this.OnResultIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RunId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long RunId
+		{
+			get
+			{
+				return this._RunId;
+			}
+			set
+			{
+				if ((this._RunId != value))
+				{
+					if (this._Run.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnRunIdChanging(value);
+					this.SendPropertyChanging();
+					this._RunId = value;
+					this.SendPropertyChanged("RunId");
+					this.OnRunIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Value", DbType="NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		public string Value
+		{
+			get
+			{
+				return this._Value;
+			}
+			set
+			{
+				if ((this._Value != value))
+				{
+					this.OnValueChanging(value);
+					this.SendPropertyChanging();
+					this._Value = value;
+					this.SendPropertyChanged("Value");
+					this.OnValueChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ResultStringValue", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ResultStringValues.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ResultStringValues.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Result_ResultStringValue", Storage="_Result", ThisKey="ResultId", OtherKey="Id", IsForeignKey=true)]
+		public Result Result
+		{
+			get
+			{
+				return this._Result.Entity;
+			}
+			set
+			{
+				Result previousValue = this._Result.Entity;
+				if (((previousValue != value) 
+							|| (this._Result.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Result.Entity = null;
+						previousValue.ResultStringValues.Remove(this);
+					}
+					this._Result.Entity = value;
+					if ((value != null))
+					{
+						value.ResultStringValues.Add(this);
+						this._ResultId = value.Id;
+					}
+					else
+					{
+						this._ResultId = default(long);
+					}
+					this.SendPropertyChanged("Result");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_ResultStringValue", Storage="_Run", ThisKey="RunId", OtherKey="Id", IsForeignKey=true)]
+		public Run Run
+		{
+			get
+			{
+				return this._Run.Entity;
+			}
+			set
+			{
+				Run previousValue = this._Run.Entity;
+				if (((previousValue != value) 
+							|| (this._Run.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Run.Entity = null;
+						previousValue.ResultStringValues.Remove(this);
+					}
+					this._Run.Entity = value;
+					if ((value != null))
+					{
+						value.ResultStringValues.Add(this);
+						this._RunId = value.Id;
+					}
+					else
+					{
+						this._RunId = default(long);
+					}
+					this.SendPropertyChanged("Run");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AlgorithmData")]
+	public partial class AlgorithmData : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _AlgorithmId;
+		
+		private long _DataTypeId;
+		
+		private System.Data.Linq.Link<System.Data.Linq.Binary> _Data;
+		
+		private EntityRef<Algorithm> _Algorithm;
+		
+		private EntityRef<DataType> _DataType;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnAlgorithmIdChanging(long value);
+    partial void OnAlgorithmIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnDataChanging(System.Data.Linq.Binary value);
+    partial void OnDataChanged();
+    #endregion
+		
+		public AlgorithmData()
+		{
+			this._Algorithm = default(EntityRef<Algorithm>);
+			this._DataType = default(EntityRef<DataType>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlgorithmId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long AlgorithmId
+		{
+			get
+			{
+				return this._AlgorithmId;
+			}
+			set
+			{
+				if ((this._AlgorithmId != value))
+				{
+					if (this._Algorithm.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnAlgorithmIdChanging(value);
+					this.SendPropertyChanging();
+					this._AlgorithmId = value;
+					this.SendPropertyChanged("AlgorithmId");
+					this.OnAlgorithmIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Data", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		public System.Data.Linq.Binary Data
+		{
+			get
+			{
+				return this._Data.Value;
+			}
+			set
+			{
+				if ((this._Data.Value != value))
+				{
+					this.OnDataChanging(value);
+					this.SendPropertyChanging();
+					this._Data.Value = value;
+					this.SendPropertyChanged("Data");
+					this.OnDataChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_AlgorithmData", Storage="_Algorithm", ThisKey="AlgorithmId", OtherKey="Id", IsForeignKey=true)]
+		public Algorithm Algorithm
+		{
+			get
+			{
+				return this._Algorithm.Entity;
+			}
+			set
+			{
+				Algorithm previousValue = this._Algorithm.Entity;
+				if (((previousValue != value) 
+							|| (this._Algorithm.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Algorithm.Entity = null;
+						previousValue.AlgorithmData = null;
+					}
+					this._Algorithm.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmData = this;
+						this._AlgorithmId = value.Id;
+					}
+					else
+					{
+						this._AlgorithmId = default(long);
+					}
+					this.SendPropertyChanged("Algorithm");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_AlgorithmData", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.AlgorithmDatas.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.AlgorithmDatas.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ProblemData")]
+	public partial class ProblemData : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ProblemId;
+		
+		private long _DataTypeId;
+		
+		private System.Data.Linq.Link<System.Data.Linq.Binary> _Data;
+		
+		private EntityRef<DataType> _DataType;
+		
+		private EntityRef<Problem> _Problem;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProblemIdChanging(long value);
+    partial void OnProblemIdChanged();
+    partial void OnDataTypeIdChanging(long value);
+    partial void OnDataTypeIdChanged();
+    partial void OnDataChanging(System.Data.Linq.Binary value);
+    partial void OnDataChanged();
+    #endregion
+		
+		public ProblemData()
+		{
+			this._DataType = default(EntityRef<DataType>);
+			this._Problem = default(EntityRef<Problem>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemId", DbType="BigInt NOT NULL", IsPrimaryKey=true)]
+		public long ProblemId
+		{
+			get
+			{
+				return this._ProblemId;
+			}
+			set
+			{
+				if ((this._ProblemId != value))
+				{
+					if (this._Problem.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemId = value;
+					this.SendPropertyChanged("ProblemId");
+					this.OnProblemIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt NOT NULL")]
+		public long DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Data", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		public System.Data.Linq.Binary Data
+		{
+			get
+			{
+				return this._Data.Value;
+			}
+			set
+			{
+				if ((this._Data.Value != value))
+				{
+					this.OnDataChanging(value);
+					this.SendPropertyChanging();
+					this._Data.Value = value;
+					this.SendPropertyChanged("Data");
+					this.OnDataChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_ProblemData", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.ProblemDatas.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemDatas.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(long);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Problem_ProblemData", Storage="_Problem", ThisKey="ProblemId", OtherKey="Id", IsForeignKey=true)]
+		public Problem Problem
+		{
+			get
+			{
+				return this._Problem.Entity;
+			}
+			set
+			{
+				Problem previousValue = this._Problem.Entity;
+				if (((previousValue != value) 
+							|| (this._Problem.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Problem.Entity = null;
+						previousValue.ProblemData = null;
+					}
+					this._Problem.Entity = value;
+					if ((value != null))
+					{
+						value.ProblemData = this;
+						this._ProblemId = value.Id;
+					}
+					else
+					{
+						this._ProblemId = default(long);
+					}
+					this.SendPropertyChanged("Problem");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+}
+#pragma warning restore 1591
Index: 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 5297)
+++ 	(revision )
@@ -1,8986 +1,0 @@
-﻿#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 5297)
+++ 	(revision )
@@ -1,488 +1,0 @@
-﻿<# // 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 5297)
+++ 	(revision )
@@ -1,478 +1,0 @@
-#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/Tests/DBTests.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/DBTests.cs	(revision 5298)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/DBTests.cs	(revision 5298)
@@ -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 DBTests
+  /// </summary>
+  [TestClass]
+  public class DBTests {
+    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 DBTests() {
+      //
+      // 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/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 5297)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/HeuristicLab.Services.OKB.DataAccess-3.3.Tests.csproj	(revision 5298)
@@ -47,6 +47,6 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="DBTests.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="UnitTest.cs" />
   </ItemGroup>
   <ItemGroup>
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 5297)
+++ 	(revision )
@@ -1,466 +1,0 @@
-﻿#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/3.3/AttributeSelector.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/AttributeSelector.cs	(revision 5297)
+++ 	(revision )
@@ -1,118 +1,0 @@
-﻿#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/DataService.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/DataService.cs	(revision 5297)
+++ 	(revision )
@@ -1,183 +1,0 @@
-﻿#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/ExperimentKit.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/ExperimentKit.cs	(revision 5297)
+++ 	(revision )
@@ -1,49 +1,0 @@
-﻿#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/Interfaces/IDataService.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IDataService.cs	(revision 5297)
+++ 	(revision )
@@ -1,94 +1,0 @@
-﻿#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/IQueryService.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IQueryService.cs	(revision 5297)
+++ 	(revision )
@@ -1,71 +1,0 @@
-﻿#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 5297)
+++ 	(revision )
@@ -1,104 +1,0 @@
-﻿#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 5297)
+++ 	(revision )
@@ -1,76 +1,0 @@
-﻿#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/QueryService.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/QueryService.cs	(revision 5297)
+++ 	(revision )
@@ -1,119 +1,0 @@
-﻿#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 5297)
+++ 	(revision )
@@ -1,336 +1,0 @@
-﻿#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 5297)
+++ 	(revision )
@@ -1,54 +1,0 @@
-﻿#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 5297)
+++ 	(revision )
@@ -1,201 +1,0 @@
-﻿#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
-  }
-}
