Index: /trunk/sources/HeuristicLab 3.3.sln
===================================================================
--- /trunk/sources/HeuristicLab 3.3.sln	(revision 8054)
+++ /trunk/sources/HeuristicLab 3.3.sln	(revision 8055)
@@ -324,4 +324,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Access.Administration-3.3", "HeuristicLab.Clients.Access.Administration\3.3\HeuristicLab.Clients.Access.Administration-3.3.csproj", "{C9CF6AE8-4637-4A75-9141-042F479B5D50}"
+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.Clients.OKB.Views-3.3", "HeuristicLab.Clients.OKB.Views\3.3\HeuristicLab.Clients.OKB.Views-3.3.csproj", "{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}"
 EndProject
 Global
@@ -1595,4 +1599,28 @@
 		{C9CF6AE8-4637-4A75-9141-042F479B5D50}.Release|x86.ActiveCfg = Release|x86
 		{C9CF6AE8-4637-4A75-9141-042F479B5D50}.Release|x86.Build.0 = Release|x86
+		{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|x64
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Debug|x64.Build.0 = Debug|x64
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Debug|x86.ActiveCfg = Debug|x86
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Debug|x86.Build.0 = Debug|x86
+		{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|x64
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Release|x64.Build.0 = Release|x64
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Release|x86.ActiveCfg = Release|x86
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Release|x86.Build.0 = Release|x86
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Debug|x64.ActiveCfg = Debug|x64
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Debug|x64.Build.0 = Debug|x64
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Debug|x86.ActiveCfg = Debug|x86
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Debug|x86.Build.0 = Debug|x86
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Release|x64.ActiveCfg = Release|x64
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Release|x64.Build.0 = Release|x64
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Release|x86.ActiveCfg = Release|x86
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/AdministratorMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/AdministratorMenuItem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/AdministratorMenuItem.cs	(revision 8055)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Optimizer;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  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() {
+      if (OKBRoles.CheckAdminUserPermissions()) {
+        MainFormManager.MainForm.ShowContent(AdministrationClient.Instance);
+      } else {
+        MessageBox.Show("You don't have the permissions for administrating the OKB.", "Security check failed", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.Designer.cs	(revision 8055)
@@ -0,0 +1,249 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  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.Administration.PlatformCollectionView();
+      this.algorithmClassesTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmClassCollectionView = new HeuristicLab.Clients.OKB.Administration.AlgorithmClassCollectionView();
+      this.algorithmsTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmCollectionView = new HeuristicLab.Clients.OKB.Administration.AlgorithmCollectionView();
+      this.problemClassesTabPage = new System.Windows.Forms.TabPage();
+      this.problemClassCollectionView = new HeuristicLab.Clients.OKB.Administration.ProblemClassCollectionView();
+      this.problemsTabPage = new System.Windows.Forms.TabPage();
+      this.problemCollectionView = new HeuristicLab.Clients.OKB.Administration.ProblemCollectionView();
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.tabControl.SuspendLayout();
+      this.platformsTabPage.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.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;
+      // 
+      // 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;
+      // 
+      // 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;
+      // 
+      // 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;
+      // 
+      // 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;
+      // 
+      // 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);
+      // 
+      // 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.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 problemClassesTabPage;
+    private System.Windows.Forms.TabPage problemsTabPage;
+    private ProblemClassCollectionView problemClassCollectionView;
+    private ProblemCollectionView problemCollectionView;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.cs	(revision 8055)
@@ -0,0 +1,109 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  [View("OKB Administrator")]
+  [Content(typeof(AdministrationClient), true)]
+  public sealed partial class AdministratorView : AsynchronousContentView {
+    public new AdministrationClient Content {
+      get { return (AdministrationClient)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;
+        algorithmClassCollectionView.Content = null;
+        algorithmCollectionView.Content = null;
+        problemClassCollectionView.Content = null;
+        problemCollectionView.Content = null;
+      } else {
+        platformCollectionView.Content = Content.Platforms;
+        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;
+      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;
+        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.RefreshAsync(new Action<Exception>((Exception ex) => ErrorHandling.ShowErrorDialog(this, "Refresh failed.", ex)));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.Designer.cs	(revision 8055)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.cs	(revision 8055)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  [View("AlgorithmClassCollection View")]
+  [Content(typeof(OKBItemCollection<AlgorithmClass>), true)]
+  public partial class AlgorithmClassCollectionView : OKBItemCollectionView<AlgorithmClass> {
+    public AlgorithmClassCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Algorithm Classes";
+    }
+
+    protected override AlgorithmClass CreateItem() {
+      return new AlgorithmClass();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.Designer.cs	(revision 8055)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.cs	(revision 8055)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  [View("AlgorithmCollection View")]
+  [Content(typeof(OKBItemCollection<Algorithm>), true)]
+  public partial class AlgorithmCollectionView : OKBItemCollectionView<Algorithm> {
+    public AlgorithmCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Algorithms";
+    }
+
+    protected override Algorithm CreateItem() {
+      return new Algorithm();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.Designer.cs	(revision 8055)
@@ -0,0 +1,399 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  partial class AlgorithmView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #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(AlgorithmView));
+      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.tabControl = new System.Windows.Forms.TabControl();
+      this.usersTabPage = new System.Windows.Forms.TabPage();
+      this.storeUsersButton = new System.Windows.Forms.Button();
+      this.refreshableLightweightUserView = new HeuristicLab.Clients.Access.Views.RefreshableLightweightUserView();
+      this.dataTabPage = new System.Windows.Forms.TabPage();
+      this.noViewAvailableLabel = new System.Windows.Forms.Label();
+      this.dataViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.saveFileButton = new System.Windows.Forms.Button();
+      this.openFileButton = new System.Windows.Forms.Button();
+      this.newDataButton = new System.Windows.Forms.Button();
+      this.storeDataButton = new System.Windows.Forms.Button();
+      this.refreshDataButton = new System.Windows.Forms.Button();
+      this.dataTypeNameLabel = new System.Windows.Forms.Label();
+      this.dataTypeGroupBox = new System.Windows.Forms.GroupBox();
+      this.dataTypeTypeNameTextBox = new System.Windows.Forms.TextBox();
+      this.dataTypeNameTextBox = new System.Windows.Forms.TextBox();
+      this.dataTypeTypeNameLabel = new System.Windows.Forms.Label();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
+      this.tabControl.SuspendLayout();
+      this.usersTabPage.SuspendLayout();
+      this.dataTabPage.SuspendLayout();
+      this.dataTypeGroupBox.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);
+      // 
+      // 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, 239);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(633, 206);
+      this.tabControl.TabIndex = 10;
+      // 
+      // usersTabPage
+      // 
+      this.usersTabPage.Controls.Add(this.storeUsersButton);
+      this.usersTabPage.Controls.Add(this.refreshableLightweightUserView);
+      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, 180);
+      this.usersTabPage.TabIndex = 0;
+      this.usersTabPage.Text = "Authorized Users and Groups";
+      this.usersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // storeUsersButton
+      // 
+      this.storeUsersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeUsersButton.Location = new System.Drawing.Point(37, 9);
+      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);
+      // 
+      // refreshableLightweightUserView
+      // 
+      this.refreshableLightweightUserView.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.refreshableLightweightUserView.BackColor = System.Drawing.Color.Transparent;
+      this.refreshableLightweightUserView.Caption = "RefreshableLightweightUser View";
+      this.refreshableLightweightUserView.Content = null;
+      this.refreshableLightweightUserView.FetchSelectedUsers = null;
+      this.refreshableLightweightUserView.Location = new System.Drawing.Point(6, 6);
+      this.refreshableLightweightUserView.Name = "refreshableLightweightUserView";
+      this.refreshableLightweightUserView.ReadOnly = false;
+      this.refreshableLightweightUserView.Size = new System.Drawing.Size(613, 168);
+      this.refreshableLightweightUserView.TabIndex = 3;
+      this.refreshableLightweightUserView.SelectedUsersChanged += new System.EventHandler(this.refreshableLightweightUserView_SelectedUsersChanged);
+      // 
+      // dataTabPage
+      // 
+      this.dataTabPage.Controls.Add(this.noViewAvailableLabel);
+      this.dataTabPage.Controls.Add(this.dataViewHost);
+      this.dataTabPage.Controls.Add(this.saveFileButton);
+      this.dataTabPage.Controls.Add(this.openFileButton);
+      this.dataTabPage.Controls.Add(this.newDataButton);
+      this.dataTabPage.Controls.Add(this.storeDataButton);
+      this.dataTabPage.Controls.Add(this.refreshDataButton);
+      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, 180);
+      this.dataTabPage.TabIndex = 1;
+      this.dataTabPage.Text = "Platform-Specific Algorithm Data";
+      this.dataTabPage.UseVisualStyleBackColor = true;
+      // 
+      // noViewAvailableLabel
+      // 
+      this.noViewAvailableLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.noViewAvailableLabel.AutoSize = true;
+      this.noViewAvailableLabel.Location = new System.Drawing.Point(265, 84);
+      this.noViewAvailableLabel.Name = "noViewAvailableLabel";
+      this.noViewAvailableLabel.Size = new System.Drawing.Size(94, 13);
+      this.noViewAvailableLabel.TabIndex = 6;
+      this.noViewAvailableLabel.Text = "No view available.";
+      // 
+      // dataViewHost
+      // 
+      this.dataViewHost.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.dataViewHost.Caption = "View";
+      this.dataViewHost.Content = null;
+      this.dataViewHost.Enabled = false;
+      this.dataViewHost.Location = new System.Drawing.Point(6, 36);
+      this.dataViewHost.Name = "dataViewHost";
+      this.dataViewHost.ReadOnly = false;
+      this.dataViewHost.Size = new System.Drawing.Size(613, 138);
+      this.dataViewHost.TabIndex = 5;
+      this.dataViewHost.ViewsLabelVisible = true;
+      this.dataViewHost.ViewType = null;
+      // 
+      // saveFileButton
+      // 
+      this.saveFileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Save;
+      this.saveFileButton.Location = new System.Drawing.Point(126, 6);
+      this.saveFileButton.Name = "saveFileButton";
+      this.saveFileButton.Size = new System.Drawing.Size(24, 24);
+      this.saveFileButton.TabIndex = 4;
+      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(96, 6);
+      this.openFileButton.Name = "openFileButton";
+      this.openFileButton.Size = new System.Drawing.Size(24, 24);
+      this.openFileButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.openFileButton, "Load Algorithm Data from File");
+      this.openFileButton.UseVisualStyleBackColor = true;
+      this.openFileButton.Click += new System.EventHandler(this.openFileButton_Click);
+      // 
+      // newDataButton
+      // 
+      this.newDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
+      this.newDataButton.Location = new System.Drawing.Point(66, 6);
+      this.newDataButton.Name = "newDataButton";
+      this.newDataButton.Size = new System.Drawing.Size(24, 24);
+      this.newDataButton.TabIndex = 2;
+      this.toolTip.SetToolTip(this.newDataButton, "Create New Algorithm Data");
+      this.newDataButton.UseVisualStyleBackColor = true;
+      this.newDataButton.Click += new System.EventHandler(this.newDataButton_Click);
+      // 
+      // storeDataButton
+      // 
+      this.storeDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeDataButton.Location = new System.Drawing.Point(36, 6);
+      this.storeDataButton.Name = "storeDataButton";
+      this.storeDataButton.Size = new System.Drawing.Size(24, 24);
+      this.storeDataButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.storeDataButton, "Store Algorithm Data");
+      this.storeDataButton.UseVisualStyleBackColor = true;
+      this.storeDataButton.Click += new System.EventHandler(this.storeDataButton_Click);
+      // 
+      // refreshDataButton
+      // 
+      this.refreshDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshDataButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshDataButton.Name = "refreshDataButton";
+      this.refreshDataButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshDataButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.refreshDataButton, "Refresh Algorithm Data");
+      this.refreshDataButton.UseVisualStyleBackColor = true;
+      this.refreshDataButton.Click += new System.EventHandler(this.refreshDataButton_Click);
+      // 
+      // dataTypeNameLabel
+      // 
+      this.dataTypeNameLabel.AutoSize = true;
+      this.dataTypeNameLabel.Location = new System.Drawing.Point(6, 22);
+      this.dataTypeNameLabel.Name = "dataTypeNameLabel";
+      this.dataTypeNameLabel.Size = new System.Drawing.Size(38, 13);
+      this.dataTypeNameLabel.TabIndex = 0;
+      this.dataTypeNameLabel.Text = "&Name:";
+      // 
+      // dataTypeGroupBox
+      // 
+      this.dataTypeGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeGroupBox.Controls.Add(this.dataTypeTypeNameTextBox);
+      this.dataTypeGroupBox.Controls.Add(this.dataTypeNameTextBox);
+      this.dataTypeGroupBox.Controls.Add(this.dataTypeTypeNameLabel);
+      this.dataTypeGroupBox.Controls.Add(this.dataTypeNameLabel);
+      this.dataTypeGroupBox.Location = new System.Drawing.Point(0, 146);
+      this.dataTypeGroupBox.Name = "dataTypeGroupBox";
+      this.dataTypeGroupBox.Size = new System.Drawing.Size(633, 77);
+      this.dataTypeGroupBox.TabIndex = 9;
+      this.dataTypeGroupBox.TabStop = false;
+      this.dataTypeGroupBox.Text = "Data Type";
+      // 
+      // dataTypeTypeNameTextBox
+      // 
+      this.dataTypeTypeNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeTypeNameTextBox.Location = new System.Drawing.Point(90, 45);
+      this.dataTypeTypeNameTextBox.Name = "dataTypeTypeNameTextBox";
+      this.dataTypeTypeNameTextBox.Size = new System.Drawing.Size(537, 20);
+      this.dataTypeTypeNameTextBox.TabIndex = 3;
+      this.toolTip.SetToolTip(this.dataTypeTypeNameTextBox, "Machine Readable Data Type Name (e.g. Assembly Qualified Name)");
+      this.dataTypeTypeNameTextBox.TextChanged += new System.EventHandler(this.dataTypeTypeNameTextBox_TextChanged);
+      // 
+      // dataTypeNameTextBox
+      // 
+      this.dataTypeNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeNameTextBox.Location = new System.Drawing.Point(90, 19);
+      this.dataTypeNameTextBox.Name = "dataTypeNameTextBox";
+      this.dataTypeNameTextBox.Size = new System.Drawing.Size(537, 20);
+      this.dataTypeNameTextBox.TabIndex = 1;
+      this.toolTip.SetToolTip(this.dataTypeNameTextBox, "Human Readable Data Type Name");
+      this.dataTypeNameTextBox.TextChanged += new System.EventHandler(this.dataTypeNameTextBox_TextChanged);
+      // 
+      // dataTypeTypeNameLabel
+      // 
+      this.dataTypeTypeNameLabel.AutoSize = true;
+      this.dataTypeTypeNameLabel.Location = new System.Drawing.Point(6, 48);
+      this.dataTypeTypeNameLabel.Name = "dataTypeTypeNameLabel";
+      this.dataTypeTypeNameLabel.Size = new System.Drawing.Size(65, 13);
+      this.dataTypeTypeNameLabel.TabIndex = 2;
+      this.dataTypeTypeNameLabel.Text = "&Type Name:";
+      // 
+      // 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";
+      // 
+      // AlgorithmView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.dataTypeGroupBox);
+      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, 445);
+      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.dataTypeGroupBox, 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.dataTabPage.PerformLayout();
+      this.dataTypeGroupBox.ResumeLayout(false);
+      this.dataTypeGroupBox.PerformLayout();
+      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.TabControl tabControl;
+    private System.Windows.Forms.TabPage usersTabPage;
+    private System.Windows.Forms.Button storeUsersButton;
+    private System.Windows.Forms.TabPage dataTabPage;
+    private System.Windows.Forms.Label dataTypeNameLabel;
+    private System.Windows.Forms.GroupBox dataTypeGroupBox;
+    private System.Windows.Forms.TextBox dataTypeTypeNameTextBox;
+    private System.Windows.Forms.TextBox dataTypeNameTextBox;
+    private System.Windows.Forms.Label dataTypeTypeNameLabel;
+    private System.Windows.Forms.Button storeDataButton;
+    private System.Windows.Forms.Button refreshDataButton;
+    private System.Windows.Forms.Button openFileButton;
+    private System.Windows.Forms.Button newDataButton;
+    private System.Windows.Forms.Button saveFileButton;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.SaveFileDialog saveFileDialog;
+    private MainForm.WindowsForms.ViewHost dataViewHost;
+    private System.Windows.Forms.Label noViewAvailableLabel;
+    private Access.Views.RefreshableLightweightUserView refreshableLightweightUserView;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.cs	(revision 8055)
@@ -0,0 +1,314 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 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.Administration {
+  [View("Algorithm View")]
+  [Content(typeof(Algorithm), true)]
+  public partial class AlgorithmView : NamedOKBItemView {
+    private List<Platform> platformComboBoxValues;
+    private List<AlgorithmClass> algorithmClassComboBoxValues;
+    private TypeSelectorDialog typeSelectorDialog;
+    private byte[] data;
+
+    public new Algorithm Content {
+      get { return (Algorithm)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public AlgorithmView() {
+      InitializeComponent();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      platformComboBox.SelectedValueChanged -= new EventHandler(platformComboBox_SelectedValueChanged);
+      if (AdministrationClient.Instance.Platforms != null)
+        platformComboBoxValues = AdministrationClient.Instance.Platforms.ToList();
+      platformComboBox.DataSource = platformComboBoxValues;
+      platformComboBox.SelectedValueChanged += new EventHandler(platformComboBox_SelectedValueChanged);
+
+      algorithmClassComboBox.SelectedValueChanged -= new EventHandler(algorithmClassComboBox_SelectedValueChanged);
+      if (AdministrationClient.Instance.AlgorithmClasses != null)
+        algorithmClassComboBoxValues = AdministrationClient.Instance.AlgorithmClasses.ToList();
+      algorithmClassComboBox.DataSource = algorithmClassComboBoxValues;
+      algorithmClassComboBox.SelectedValueChanged += new EventHandler(algorithmClassComboBox_SelectedValueChanged);
+
+      data = null;
+      dataViewHost.Content = null;
+      if (Content == null) {
+        platformComboBox.SelectedIndex = -1;
+        algorithmClassComboBox.SelectedIndex = -1;
+        dataTypeNameTextBox.Text = string.Empty;
+        dataTypeTypeNameTextBox.Text = string.Empty;
+        refreshableLightweightUserView.Content = null;
+        refreshableLightweightUserView.FetchSelectedUsers = null;
+      } else {
+        platformComboBox.SelectedItem = platformComboBoxValues.FirstOrDefault(p => p.Id == Content.PlatformId);
+        algorithmClassComboBox.SelectedItem = algorithmClassComboBoxValues.FirstOrDefault(a => a.Id == Content.AlgorithmClassId);
+        dataTypeNameTextBox.Text = Content.DataTypeName;
+        dataTypeTypeNameTextBox.Text = Content.DataTypeTypeName;
+        refreshableLightweightUserView.Content = Access.AccessClient.Instance;
+        refreshableLightweightUserView.FetchSelectedUsers = new Func<List<Guid>>(delegate { return AdministrationClient.GetAlgorithmUsers(Content.Id); });
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      platformComboBox.Enabled = (Content != null) && !ReadOnly;
+      algorithmClassComboBox.Enabled = (Content != null) && !ReadOnly;
+      dataTypeGroupBox.Enabled = (Content != null) && !ReadOnly;
+      storeUsersButton.Enabled = (refreshableLightweightUserView.GetCheckedUsers() != null) && !ReadOnly;
+      refreshableLightweightUserView.Enabled = (refreshableLightweightUserView.Content != null) && !ReadOnly;
+      refreshDataButton.Enabled = (Content != null) && (Content.Id != 0);
+      storeDataButton.Enabled = ((data != null) || (dataViewHost.Content != null)) && !ReadOnly;
+      openFileButton.Enabled = (Content != null) && (Content.Id != 0);
+      saveFileButton.Enabled = (data != null) || (dataViewHost.Content != null);
+      noViewAvailableLabel.Visible = dataViewHost.Content == null;
+
+      bool isHL33Platform = platformComboBox.Text == "HeuristicLab 3.3";
+      dataTypeNameTextBox.ReadOnly = isHL33Platform;
+      dataTypeTypeNameTextBox.ReadOnly = isHL33Platform;
+      newDataButton.Enabled = isHL33Platform && (Content.Id != 0) && !ReadOnly;
+    }
+
+    #region Content Events
+    protected override void OnContentPropertyChanged(string propertyName) {
+      switch (propertyName) {
+        case "Id":
+          SetEnabledStateOfControls();
+          break;
+        case "PlatformId":
+          platformComboBox.SelectedItem = platformComboBoxValues.FirstOrDefault(p => p.Id == Content.PlatformId);
+          SetEnabledStateOfControls();
+          break;
+        case "AlgorithmClassId":
+          algorithmClassComboBox.SelectedItem = algorithmClassComboBoxValues.FirstOrDefault(a => a.Id == Content.AlgorithmClassId);
+          break;
+        case "DataTypeName":
+          dataTypeNameTextBox.Text = Content.DataTypeName;
+          break;
+        case "DataTypeTypeName":
+          dataTypeTypeNameTextBox.Text = Content.DataTypeTypeName;
+          break;
+      }
+    }
+    #endregion
+
+    #region Control Events
+    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 dataTypeNameTextBox_TextChanged(object sender, EventArgs e) {
+      if (dataTypeNameTextBox.Text != Content.DataTypeName)
+        Content.DataTypeName = dataTypeNameTextBox.Text;
+    }
+    private void dataTypeTypeNameTextBox_TextChanged(object sender, EventArgs e) {
+      if (dataTypeTypeNameTextBox.Text != Content.DataTypeTypeName)
+        Content.DataTypeTypeName = dataTypeTypeNameTextBox.Text;
+    }
+
+    private void storeUsersButton_Click(object sender, System.EventArgs e) {
+      try {
+        AdministrationClient.UpdateAlgorithmUsers(Content.Id, refreshableLightweightUserView.GetCheckedUsers().Select(x => x.Id).ToList());
+        storeUsersButton.Enabled = false;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog(this, "Store authorized users and groups failed.", ex);
+      }
+    }
+
+    private void refreshDataButton_Click(object sender, EventArgs e) {
+      CallAsync(
+        () => {
+          data = null;
+          dataViewHost.Content = null;
+          data = AdministrationClient.GetAlgorithmData(Content.Id);
+          if (data != null) {
+            using (MemoryStream stream = new MemoryStream(data)) {
+              try {
+                dataViewHost.Content = XmlParser.Deserialize<IContent>(stream);
+              }
+              catch (Exception) { }
+              stream.Close();
+            }
+          }
+        },
+        "Refresh algorithm data failed.",
+        () => SetEnabledStateOfControls()
+      );
+    }
+    private void storeDataButton_Click(object sender, EventArgs e) {
+      CallAsync(
+        () => {
+          if (dataViewHost.Content != null) {
+            using (MemoryStream stream = new MemoryStream()) {
+              IAlgorithm algorithm = dataViewHost.Content as IAlgorithm;
+              algorithm.Prepare(true);
+              XmlGenerator.Serialize(algorithm, stream);
+              stream.Close();
+              data = stream.ToArray();
+            }
+          }
+          AdministrationClient.UpdateAlgorithmData(Content.Id, data);
+        },
+        "Store algorithm data failed.",
+        null
+      );
+    }
+    private void newDataButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Algorithm";
+        typeSelectorDialog.TypeSelector.Caption = "Available Algorithms";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IAlgorithm), false, true);
+      }
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          Content.DataTypeName = typeSelectorDialog.TypeSelector.SelectedType.Name;
+          Content.DataTypeTypeName = typeSelectorDialog.TypeSelector.SelectedType.AssemblyQualifiedName;
+          data = null;
+          dataViewHost.Content = (IContent)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, "Create new algorithm data failed.", ex);
+        }
+        SetEnabledStateOfControls();
+      }
+    }
+    private void openFileButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        CallAsync(
+          () => {
+            IContent algorithm = null;
+            try {
+              algorithm = XmlParser.Deserialize<IContent>(openFileDialog.FileName);
+            }
+            catch (Exception) { }
+
+            if (algorithm != null) {
+              Content.DataTypeName = algorithm.GetType().Name;
+              Content.DataTypeTypeName = algorithm.GetType().AssemblyQualifiedName;
+              data = null;
+            } else {
+              using (FileStream stream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read)) {
+                data = new byte[stream.Length];
+                stream.Read(data, 0, data.Length);
+                stream.Close();
+              }
+            }
+            dataViewHost.Content = algorithm;
+          },
+          "Save algorithm data into file failed.",
+          () => SetEnabledStateOfControls()
+        );
+      }
+    }
+    private void saveFileButton_Click(object sender, EventArgs e) {
+      if (saveFileDialog.ShowDialog(this) == DialogResult.OK) {
+        CallAsync(
+          () => {
+            if (dataViewHost.Content != null) {
+              XmlGenerator.Serialize(dataViewHost.Content, saveFileDialog.FileName);
+            } else {
+              using (FileStream stream = new FileStream(saveFileDialog.FileName, FileMode.Create, FileAccess.Write)) {
+                stream.Write(data, 0, data.Length);
+                stream.Close();
+              }
+            }
+          },
+          "Save algorithm data into file failed.",
+          null
+        );
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void CallAsync(Action call, string errorMessage, Action continueWith) {
+      BeginAsyncCall();
+      call.BeginInvoke(delegate(IAsyncResult result) {
+        Exception exception = null;
+        try {
+          call.EndInvoke(result);
+        }
+        catch (Exception ex) {
+          exception = ex;
+        }
+        EndAsyncCall(errorMessage, exception, continueWith);
+      }, null);
+    }
+    private void BeginAsyncCall() {
+      if (InvokeRequired)
+        Invoke(new Action(BeginAsyncCall));
+      else {
+        Cursor = Cursors.AppStarting;
+        Enabled = false;
+      }
+    }
+    private void EndAsyncCall(string errorMessage, Exception exception, Action continueWith) {
+      if (InvokeRequired)
+        Invoke(new Action<string, Exception, Action>(EndAsyncCall), errorMessage, exception, continueWith);
+      else {
+        Cursor = Cursors.Default;
+        Enabled = true;
+        if (exception != null) ErrorHandling.ShowErrorDialog(this, errorMessage, exception);
+        if (continueWith != null) continueWith();
+      }
+    }
+    #endregion
+
+    private void refreshableLightweightUserView_SelectedUsersChanged(object sender, EventArgs e) {
+      storeUsersButton.Enabled = !ReadOnly;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.Designer.cs	(revision 8055)
@@ -0,0 +1,124 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  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);
+      // 
+      // 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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.cs	(revision 8055)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Administration {
+  [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 = "NamedOKBItem 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_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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.Designer.cs	(revision 8055)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  partial class OKBItemCollectionView<T> {
+    /// <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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.cs	(revision 8055)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  [View("OKBItemCollection View")]
+  [Content(typeof(OKBItemCollection<>), true)]
+  public partial class OKBItemCollectionView<T> : ItemCollectionView<T> where T : class, IOKBItem {
+    public OKBItemCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "OKB Items";
+    }
+
+    protected override void removeButton_Click(object sender, System.EventArgs e) {
+      try {
+        base.removeButton_Click(sender, e);
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog(this, "Delete failed.", ex);
+      }
+    }
+    protected override void itemsListView_KeyDown(object sender, KeyEventArgs e) {
+      try {
+        base.itemsListView_KeyDown(sender, e);
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog(this, "Delete failed.", ex);
+      }
+    }
+    protected override void itemsListView_ItemDrag(object sender, ItemDragEventArgs e) {
+      try {
+        base.itemsListView_ItemDrag(sender, e);
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog(this, "Delete failed.", ex);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.Designer.cs	(revision 8055)
@@ -0,0 +1,82 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.cs	(revision 8055)
@@ -0,0 +1,84 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  [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) {
+      try {
+        Content.Store();
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog(this, "Store failed.", ex);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.Designer.cs	(revision 8055)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.cs	(revision 8055)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  [View("PlatformCollection View")]
+  [Content(typeof(OKBItemCollection<Platform>), true)]
+  public partial class PlatformCollectionView : OKBItemCollectionView<Platform> {
+    public PlatformCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Platforms";
+    }
+
+    protected override Platform CreateItem() {
+      return new Platform();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.Designer.cs	(revision 8055)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.cs	(revision 8055)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  [View("ProblemClassCollection View")]
+  [Content(typeof(OKBItemCollection<ProblemClass>), true)]
+  public partial class ProblemClassCollectionView : OKBItemCollectionView<ProblemClass> {
+    public ProblemClassCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Problem Classes";
+    }
+
+    protected override ProblemClass CreateItem() {
+      return new ProblemClass();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.Designer.cs	(revision 8055)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.cs	(revision 8055)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  [View("ProblemCollection View")]
+  [Content(typeof(OKBItemCollection<Problem>), true)]
+  public partial class ProblemCollectionView : OKBItemCollectionView<Problem> {
+    public ProblemCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Problems";
+    }
+
+    protected override Problem CreateItem() {
+      return new Problem();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.Designer.cs	(revision 8055)
@@ -0,0 +1,398 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  partial class ProblemView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #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(ProblemView));
+      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.tabControl = new System.Windows.Forms.TabControl();
+      this.usersTabPage = new System.Windows.Forms.TabPage();
+      this.storeUsersButton = new System.Windows.Forms.Button();
+      this.problemUserView = new HeuristicLab.Clients.Access.Views.RefreshableLightweightUserView();
+      this.dataTabPage = new System.Windows.Forms.TabPage();
+      this.noViewAvailableLabel = new System.Windows.Forms.Label();
+      this.dataViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.saveFileButton = new System.Windows.Forms.Button();
+      this.openFileButton = new System.Windows.Forms.Button();
+      this.newDataButton = new System.Windows.Forms.Button();
+      this.storeDataButton = new System.Windows.Forms.Button();
+      this.refreshDataButton = new System.Windows.Forms.Button();
+      this.dataTypeNameLabel = new System.Windows.Forms.Label();
+      this.dataTypeGroupBox = new System.Windows.Forms.GroupBox();
+      this.dataTypeTypeNameTextBox = new System.Windows.Forms.TextBox();
+      this.dataTypeNameTextBox = new System.Windows.Forms.TextBox();
+      this.dataTypeTypeNameLabel = new System.Windows.Forms.Label();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
+      this.tabControl.SuspendLayout();
+      this.usersTabPage.SuspendLayout();
+      this.dataTabPage.SuspendLayout();
+      this.dataTypeGroupBox.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(76, 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);
+      // 
+      // 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, 239);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(633, 206);
+      this.tabControl.TabIndex = 10;
+      // 
+      // usersTabPage
+      // 
+      this.usersTabPage.Controls.Add(this.storeUsersButton);
+      this.usersTabPage.Controls.Add(this.problemUserView);
+      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, 180);
+      this.usersTabPage.TabIndex = 0;
+      this.usersTabPage.Text = "Authorized Users and Groups";
+      this.usersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // storeUsersButton
+      // 
+      this.storeUsersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeUsersButton.Location = new System.Drawing.Point(38, 9);
+      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);
+      // 
+      // problemUserView
+      // 
+      this.problemUserView.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.problemUserView.Caption = "RefreshableLightweightUser View";
+      this.problemUserView.Content = null;
+      this.problemUserView.FetchSelectedUsers = null;
+      this.problemUserView.Location = new System.Drawing.Point(6, 6);
+      this.problemUserView.Name = "problemUserView";
+      this.problemUserView.ReadOnly = false;
+      this.problemUserView.Size = new System.Drawing.Size(613, 168);
+      this.problemUserView.TabIndex = 2;
+      this.problemUserView.SelectedUsersChanged += new System.EventHandler(this.problemUserView_SelectedUsersChanged);
+      // 
+      // dataTabPage
+      // 
+      this.dataTabPage.Controls.Add(this.noViewAvailableLabel);
+      this.dataTabPage.Controls.Add(this.dataViewHost);
+      this.dataTabPage.Controls.Add(this.saveFileButton);
+      this.dataTabPage.Controls.Add(this.openFileButton);
+      this.dataTabPage.Controls.Add(this.newDataButton);
+      this.dataTabPage.Controls.Add(this.storeDataButton);
+      this.dataTabPage.Controls.Add(this.refreshDataButton);
+      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, 180);
+      this.dataTabPage.TabIndex = 1;
+      this.dataTabPage.Text = "Platform-Specific Problem Data";
+      this.dataTabPage.UseVisualStyleBackColor = true;
+      // 
+      // noViewAvailableLabel
+      // 
+      this.noViewAvailableLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.noViewAvailableLabel.AutoSize = true;
+      this.noViewAvailableLabel.Location = new System.Drawing.Point(265, 84);
+      this.noViewAvailableLabel.Name = "noViewAvailableLabel";
+      this.noViewAvailableLabel.Size = new System.Drawing.Size(94, 13);
+      this.noViewAvailableLabel.TabIndex = 6;
+      this.noViewAvailableLabel.Text = "No view available.";
+      // 
+      // dataViewHost
+      // 
+      this.dataViewHost.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.dataViewHost.Caption = "View";
+      this.dataViewHost.Content = null;
+      this.dataViewHost.Enabled = false;
+      this.dataViewHost.Location = new System.Drawing.Point(6, 36);
+      this.dataViewHost.Name = "dataViewHost";
+      this.dataViewHost.ReadOnly = false;
+      this.dataViewHost.Size = new System.Drawing.Size(613, 138);
+      this.dataViewHost.TabIndex = 5;
+      this.dataViewHost.ViewsLabelVisible = true;
+      this.dataViewHost.ViewType = null;
+      // 
+      // saveFileButton
+      // 
+      this.saveFileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Save;
+      this.saveFileButton.Location = new System.Drawing.Point(126, 6);
+      this.saveFileButton.Name = "saveFileButton";
+      this.saveFileButton.Size = new System.Drawing.Size(24, 24);
+      this.saveFileButton.TabIndex = 4;
+      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(96, 6);
+      this.openFileButton.Name = "openFileButton";
+      this.openFileButton.Size = new System.Drawing.Size(24, 24);
+      this.openFileButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.openFileButton, "Load Problem Data from File");
+      this.openFileButton.UseVisualStyleBackColor = true;
+      this.openFileButton.Click += new System.EventHandler(this.openFileButton_Click);
+      // 
+      // newDataButton
+      // 
+      this.newDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
+      this.newDataButton.Location = new System.Drawing.Point(66, 6);
+      this.newDataButton.Name = "newDataButton";
+      this.newDataButton.Size = new System.Drawing.Size(24, 24);
+      this.newDataButton.TabIndex = 2;
+      this.toolTip.SetToolTip(this.newDataButton, "Create New Problem Data");
+      this.newDataButton.UseVisualStyleBackColor = true;
+      this.newDataButton.Click += new System.EventHandler(this.newDataButton_Click);
+      // 
+      // storeDataButton
+      // 
+      this.storeDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeDataButton.Location = new System.Drawing.Point(36, 6);
+      this.storeDataButton.Name = "storeDataButton";
+      this.storeDataButton.Size = new System.Drawing.Size(24, 24);
+      this.storeDataButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.storeDataButton, "Store Problem Data");
+      this.storeDataButton.UseVisualStyleBackColor = true;
+      this.storeDataButton.Click += new System.EventHandler(this.storeDataButton_Click);
+      // 
+      // refreshDataButton
+      // 
+      this.refreshDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshDataButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshDataButton.Name = "refreshDataButton";
+      this.refreshDataButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshDataButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.refreshDataButton, "Refresh Problem Data");
+      this.refreshDataButton.UseVisualStyleBackColor = true;
+      this.refreshDataButton.Click += new System.EventHandler(this.refreshDataButton_Click);
+      // 
+      // dataTypeNameLabel
+      // 
+      this.dataTypeNameLabel.AutoSize = true;
+      this.dataTypeNameLabel.Location = new System.Drawing.Point(6, 22);
+      this.dataTypeNameLabel.Name = "dataTypeNameLabel";
+      this.dataTypeNameLabel.Size = new System.Drawing.Size(38, 13);
+      this.dataTypeNameLabel.TabIndex = 0;
+      this.dataTypeNameLabel.Text = "&Name:";
+      // 
+      // dataTypeGroupBox
+      // 
+      this.dataTypeGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeGroupBox.Controls.Add(this.dataTypeTypeNameTextBox);
+      this.dataTypeGroupBox.Controls.Add(this.dataTypeNameTextBox);
+      this.dataTypeGroupBox.Controls.Add(this.dataTypeTypeNameLabel);
+      this.dataTypeGroupBox.Controls.Add(this.dataTypeNameLabel);
+      this.dataTypeGroupBox.Location = new System.Drawing.Point(0, 146);
+      this.dataTypeGroupBox.Name = "dataTypeGroupBox";
+      this.dataTypeGroupBox.Size = new System.Drawing.Size(633, 77);
+      this.dataTypeGroupBox.TabIndex = 9;
+      this.dataTypeGroupBox.TabStop = false;
+      this.dataTypeGroupBox.Text = "Data Type";
+      // 
+      // dataTypeTypeNameTextBox
+      // 
+      this.dataTypeTypeNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeTypeNameTextBox.Location = new System.Drawing.Point(90, 45);
+      this.dataTypeTypeNameTextBox.Name = "dataTypeTypeNameTextBox";
+      this.dataTypeTypeNameTextBox.Size = new System.Drawing.Size(537, 20);
+      this.dataTypeTypeNameTextBox.TabIndex = 3;
+      this.toolTip.SetToolTip(this.dataTypeTypeNameTextBox, "Machine Readable Data Type Name (e.g. Assembly Qualified Name)");
+      this.dataTypeTypeNameTextBox.TextChanged += new System.EventHandler(this.dataTypeTypeNameTextBox_TextChanged);
+      // 
+      // dataTypeNameTextBox
+      // 
+      this.dataTypeNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeNameTextBox.Location = new System.Drawing.Point(90, 19);
+      this.dataTypeNameTextBox.Name = "dataTypeNameTextBox";
+      this.dataTypeNameTextBox.Size = new System.Drawing.Size(537, 20);
+      this.dataTypeNameTextBox.TabIndex = 1;
+      this.toolTip.SetToolTip(this.dataTypeNameTextBox, "Human Readable Data Type Name");
+      this.dataTypeNameTextBox.TextChanged += new System.EventHandler(this.dataTypeNameTextBox_TextChanged);
+      // 
+      // dataTypeTypeNameLabel
+      // 
+      this.dataTypeTypeNameLabel.AutoSize = true;
+      this.dataTypeTypeNameLabel.Location = new System.Drawing.Point(6, 48);
+      this.dataTypeTypeNameLabel.Name = "dataTypeTypeNameLabel";
+      this.dataTypeTypeNameLabel.Size = new System.Drawing.Size(65, 13);
+      this.dataTypeTypeNameLabel.TabIndex = 2;
+      this.dataTypeTypeNameLabel.Text = "&Type Name:";
+      // 
+      // 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";
+      // 
+      // ProblemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.dataTypeGroupBox);
+      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, 445);
+      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.dataTypeGroupBox, 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.dataTabPage.PerformLayout();
+      this.dataTypeGroupBox.ResumeLayout(false);
+      this.dataTypeGroupBox.PerformLayout();
+      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.TabControl tabControl;
+    private System.Windows.Forms.TabPage usersTabPage;
+    private System.Windows.Forms.Button storeUsersButton;
+    private System.Windows.Forms.TabPage dataTabPage;
+    private System.Windows.Forms.Label dataTypeNameLabel;
+    private System.Windows.Forms.GroupBox dataTypeGroupBox;
+    private System.Windows.Forms.TextBox dataTypeTypeNameTextBox;
+    private System.Windows.Forms.TextBox dataTypeNameTextBox;
+    private System.Windows.Forms.Label dataTypeTypeNameLabel;
+    private System.Windows.Forms.Button storeDataButton;
+    private System.Windows.Forms.Button refreshDataButton;
+    private System.Windows.Forms.Button openFileButton;
+    private System.Windows.Forms.Button newDataButton;
+    private System.Windows.Forms.Button saveFileButton;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.SaveFileDialog saveFileDialog;
+    private MainForm.WindowsForms.ViewHost dataViewHost;
+    private System.Windows.Forms.Label noViewAvailableLabel;
+    private Access.Views.RefreshableLightweightUserView problemUserView;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.cs	(revision 8055)
@@ -0,0 +1,312 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 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.Administration {
+  [View("Problem View")]
+  [Content(typeof(Problem), true)]
+  public partial class ProblemView : NamedOKBItemView {
+    private List<Platform> platformComboBoxValues;
+    private List<ProblemClass> problemClassComboBoxValues;
+    private TypeSelectorDialog typeSelectorDialog;
+    private byte[] data;
+
+    public new Problem Content {
+      get { return (Problem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ProblemView() {
+      InitializeComponent();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      platformComboBox.SelectedValueChanged -= new EventHandler(platformComboBox_SelectedValueChanged);
+      if (AdministrationClient.Instance.Platforms != null)
+        platformComboBoxValues = AdministrationClient.Instance.Platforms.ToList();
+      platformComboBox.DataSource = platformComboBoxValues;
+      platformComboBox.SelectedValueChanged += new EventHandler(platformComboBox_SelectedValueChanged);
+
+      problemClassComboBox.SelectedValueChanged -= new EventHandler(problemClassComboBox_SelectedValueChanged);
+      if (AdministrationClient.Instance.ProblemClasses != null)
+        problemClassComboBoxValues = AdministrationClient.Instance.ProblemClasses.ToList();
+      problemClassComboBox.DataSource = problemClassComboBoxValues;
+      problemClassComboBox.SelectedValueChanged += new EventHandler(problemClassComboBox_SelectedValueChanged);
+
+      data = null;
+      dataViewHost.Content = null;
+      if (Content == null) {
+        platformComboBox.SelectedIndex = -1;
+        problemClassComboBox.SelectedIndex = -1;
+        dataTypeNameTextBox.Text = string.Empty;
+        dataTypeTypeNameTextBox.Text = string.Empty;
+        problemUserView.Content = null;
+        problemUserView.FetchSelectedUsers = null;
+      } else {
+        platformComboBox.SelectedItem = platformComboBoxValues.FirstOrDefault(p => p.Id == Content.PlatformId);
+        problemClassComboBox.SelectedItem = problemClassComboBoxValues.FirstOrDefault(a => a.Id == Content.ProblemClassId);
+        dataTypeNameTextBox.Text = Content.DataTypeName;
+        dataTypeTypeNameTextBox.Text = Content.DataTypeTypeName;
+        problemUserView.Content = Access.AccessClient.Instance;
+        problemUserView.FetchSelectedUsers = new Func<List<Guid>>(delegate { return AdministrationClient.GetProblemUsers(Content.Id); });
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      platformComboBox.Enabled = (Content != null) && !ReadOnly;
+      problemClassComboBox.Enabled = (Content != null) && !ReadOnly;
+      dataTypeGroupBox.Enabled = (Content != null) && !ReadOnly;
+      problemUserView.Enabled = (problemUserView.Content != null) && !ReadOnly;
+      storeUsersButton.Enabled = (problemUserView.GetCheckedUsers() != null) && !ReadOnly;
+      refreshDataButton.Enabled = (Content != null) && (Content.Id != 0);
+      storeDataButton.Enabled = ((data != null) || (dataViewHost.Content != null)) && !ReadOnly;
+      openFileButton.Enabled = (Content != null) && (Content.Id != 0);
+      saveFileButton.Enabled = (data != null) || (dataViewHost.Content != null);
+      noViewAvailableLabel.Visible = dataViewHost.Content == null;
+
+      bool isHL33Platform = platformComboBox.Text == "HeuristicLab 3.3";
+      dataTypeNameTextBox.ReadOnly = isHL33Platform;
+      dataTypeTypeNameTextBox.ReadOnly = isHL33Platform;
+      newDataButton.Enabled = isHL33Platform && (Content.Id != 0) && !ReadOnly;
+    }
+
+    #region Content Events
+    protected override void OnContentPropertyChanged(string propertyName) {
+      switch (propertyName) {
+        case "Id":
+          SetEnabledStateOfControls();
+          break;
+        case "PlatformId":
+          platformComboBox.SelectedItem = platformComboBoxValues.FirstOrDefault(p => p.Id == Content.PlatformId);
+          SetEnabledStateOfControls();
+          break;
+        case "ProblemClassId":
+          problemClassComboBox.SelectedItem = problemClassComboBoxValues.FirstOrDefault(a => a.Id == Content.ProblemClassId);
+          break;
+        case "DataTypeName":
+          dataTypeNameTextBox.Text = Content.DataTypeName;
+          break;
+        case "DataTypeTypeName":
+          dataTypeTypeNameTextBox.Text = Content.DataTypeTypeName;
+          break;
+      }
+    }
+    #endregion
+
+    #region Control Events
+    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 dataTypeNameTextBox_TextChanged(object sender, EventArgs e) {
+      if (dataTypeNameTextBox.Text != Content.DataTypeName)
+        Content.DataTypeName = dataTypeNameTextBox.Text;
+    }
+    private void dataTypeTypeNameTextBox_TextChanged(object sender, EventArgs e) {
+      if (dataTypeTypeNameTextBox.Text != Content.DataTypeTypeName)
+        Content.DataTypeTypeName = dataTypeTypeNameTextBox.Text;
+    }
+
+    private void storeUsersButton_Click(object sender, System.EventArgs e) {
+      try {
+        AdministrationClient.UpdateProblemUsers(Content.Id, problemUserView.GetCheckedUsers().Select(x => x.Id).ToList());
+        storeUsersButton.Enabled = false;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog(this, "Store authorized users and groups failed.", ex);
+      }
+    }
+    private void problemUserView_SelectedUsersChanged(object sender, EventArgs e) {
+      storeUsersButton.Enabled = !ReadOnly;
+    }
+
+
+    private void refreshDataButton_Click(object sender, EventArgs e) {
+      CallAsync(
+        () => {
+          data = null;
+          dataViewHost.Content = null;
+          data = AdministrationClient.GetProblemData(Content.Id);
+          if (data != null) {
+            using (MemoryStream stream = new MemoryStream(data)) {
+              try {
+                dataViewHost.Content = XmlParser.Deserialize<IContent>(stream);
+              }
+              catch (Exception) { }
+              stream.Close();
+            }
+          }
+        },
+        "Refresh problem data failed.",
+        () => SetEnabledStateOfControls()
+      );
+    }
+    private void storeDataButton_Click(object sender, EventArgs e) {
+      CallAsync(
+        () => {
+          if (dataViewHost.Content != null) {
+            using (MemoryStream stream = new MemoryStream()) {
+              XmlGenerator.Serialize(dataViewHost.Content, stream);
+              stream.Close();
+              data = stream.ToArray();
+            }
+          }
+          AdministrationClient.UpdateProblemData(Content.Id, data);
+        },
+        "Store problem data failed.",
+        null
+      );
+    }
+    private void newDataButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Problem";
+        typeSelectorDialog.TypeSelector.Caption = "Available Problems";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IProblem), false, true);
+      }
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          Content.DataTypeName = typeSelectorDialog.TypeSelector.SelectedType.Name;
+          Content.DataTypeTypeName = typeSelectorDialog.TypeSelector.SelectedType.AssemblyQualifiedName;
+          data = null;
+          dataViewHost.Content = (IContent)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, "Create new problem data failed.", ex);
+        }
+        SetEnabledStateOfControls();
+      }
+    }
+    private void openFileButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        CallAsync(
+          () => {
+            IContent problem = null;
+            try {
+              problem = XmlParser.Deserialize<IContent>(openFileDialog.FileName);
+            }
+            catch (Exception) { }
+
+            if (problem != null) {
+              Content.DataTypeName = problem.GetType().Name;
+              Content.DataTypeTypeName = problem.GetType().AssemblyQualifiedName;
+              data = null;
+            } else {
+              using (FileStream stream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read)) {
+                data = new byte[stream.Length];
+                stream.Read(data, 0, data.Length);
+                stream.Close();
+              }
+            }
+            dataViewHost.Content = problem;
+          },
+          "Save problem data into file failed.",
+          () => SetEnabledStateOfControls()
+        );
+      }
+    }
+    private void saveFileButton_Click(object sender, EventArgs e) {
+      if (saveFileDialog.ShowDialog(this) == DialogResult.OK) {
+        CallAsync(
+          () => {
+            if (dataViewHost.Content != null) {
+              XmlGenerator.Serialize(dataViewHost.Content, saveFileDialog.FileName);
+            } else {
+              using (FileStream stream = new FileStream(saveFileDialog.FileName, FileMode.Create, FileAccess.Write)) {
+                stream.Write(data, 0, data.Length);
+                stream.Close();
+              }
+            }
+          },
+          "Save problem data into file failed.",
+          null
+        );
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void CallAsync(Action call, string errorMessage, Action continueWith) {
+      BeginAsyncCall();
+      call.BeginInvoke(delegate(IAsyncResult result) {
+        Exception exception = null;
+        try {
+          call.EndInvoke(result);
+        }
+        catch (Exception ex) {
+          exception = ex;
+        }
+        EndAsyncCall(errorMessage, exception, continueWith);
+      }, null);
+    }
+    private void BeginAsyncCall() {
+      if (InvokeRequired)
+        Invoke(new Action(BeginAsyncCall));
+      else {
+        Cursor = Cursors.AppStarting;
+        Enabled = false;
+      }
+    }
+    private void EndAsyncCall(string errorMessage, Exception exception, Action continueWith) {
+      if (InvokeRequired)
+        Invoke(new Action<string, Exception, Action>(EndAsyncCall), errorMessage, exception, continueWith);
+      else {
+        Cursor = Cursors.Default;
+        Enabled = true;
+        if (exception != null) ErrorHandling.ShowErrorDialog(this, errorMessage, exception);
+        if (continueWith != null) continueWith();
+      }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj	(revision 8055)
@@ -0,0 +1,329 @@
+﻿<?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>{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.OKB</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.OKB.Views-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>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <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="Administration\AdministratorMenuItem.cs" />
+    <Compile Include="Administration\Views\AdministratorView.cs" />
+    <Compile Include="Administration\Views\AdministratorView.Designer.cs">
+      <DependentUpon>AdministratorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\AlgorithmClassCollectionView.cs" />
+    <Compile Include="Administration\Views\AlgorithmClassCollectionView.Designer.cs">
+      <DependentUpon>AlgorithmClassCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\AlgorithmCollectionView.cs" />
+    <Compile Include="Administration\Views\AlgorithmCollectionView.Designer.cs">
+      <DependentUpon>AlgorithmCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\AlgorithmView.cs" />
+    <Compile Include="Administration\Views\AlgorithmView.Designer.cs">
+      <DependentUpon>AlgorithmView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\OKBItemCollectionView.cs" />
+    <Compile Include="Administration\Views\OKBItemCollectionView.Designer.cs">
+      <DependentUpon>OKBItemCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\NamedOKBItemView.cs" />
+    <Compile Include="Administration\Views\NamedOKBItemView.Designer.cs">
+      <DependentUpon>NamedOKBItemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\OKBItemView.cs" />
+    <Compile Include="Administration\Views\OKBItemView.Designer.cs">
+      <DependentUpon>OKBItemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\PlatformCollectionView.cs" />
+    <Compile Include="Administration\Views\PlatformCollectionView.Designer.cs">
+      <DependentUpon>PlatformCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\ProblemClassCollectionView.cs" />
+    <Compile Include="Administration\Views\ProblemClassCollectionView.Designer.cs">
+      <DependentUpon>ProblemClassCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\ProblemCollectionView.cs" />
+    <Compile Include="Administration\Views\ProblemCollectionView.Designer.cs">
+      <DependentUpon>ProblemCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\ProblemView.cs" />
+    <Compile Include="Administration\Views\ProblemView.Designer.cs">
+      <DependentUpon>ProblemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Query\QueryMenuItem.cs" />
+    <Compile Include="Query\Views\CombinedFilterView.cs" />
+    <Compile Include="Query\Views\CombinedFilterView.Designer.cs">
+      <DependentUpon>CombinedFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonTimeSpanFilterView.cs" />
+    <Compile Include="Query\Views\OrdinalComparisonTimeSpanFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonTimeSpanFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonPercentFilterView.cs" />
+    <Compile Include="Query\Views\OrdinalComparisonPercentFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonPercentFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonDateTimeFilterView.cs" />
+    <Compile Include="Query\Views\OrdinalComparisonDateTimeFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonDateTimeFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonFloatFilterView.cs" />
+    <Compile Include="Query\Views\OrdinalComparisonFloatFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonFloatFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonIntFilterView.cs" />
+    <Compile Include="Query\Views\OrdinalComparisonIntFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonIntFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\EqualityComparisonBoolFilterView.cs" />
+    <Compile Include="Query\Views\EqualityComparisonBoolFilterView.Designer.cs">
+      <DependentUpon>EqualityComparisonBoolFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\EqualityComparisonFilterView.cs" />
+    <Compile Include="Query\Views\EqualityComparisonFilterView.Designer.cs">
+      <DependentUpon>EqualityComparisonFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\FilterView.cs" />
+    <Compile Include="Query\Views\FilterView.Designer.cs">
+      <DependentUpon>FilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonDoubleFilterView.cs" />
+    <Compile Include="Query\Views\OrdinalComparisonDoubleFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonDoubleFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonFilterView.cs" />
+    <Compile Include="Query\Views\OrdinalComparisonFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonLongFilterView.cs" />
+    <Compile Include="Query\Views\OrdinalComparisonLongFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonLongFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\QueryView.cs" />
+    <Compile Include="Query\Views\QueryView.Designer.cs">
+      <DependentUpon>QueryView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\StringComparisonAvailableValuesFilterView.cs" />
+    <Compile Include="Query\Views\StringComparisonAvailableValuesFilterView.Designer.cs">
+      <DependentUpon>StringComparisonAvailableValuesFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\StringComparisonFilterView.cs" />
+    <Compile Include="Query\Views\StringComparisonFilterView.Designer.cs">
+      <DependentUpon>StringComparisonFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="RunCreation\CreateFromExperimentMenuItem.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RunCreation\Views\OKBAlgorithmView.cs" />
+    <Compile Include="RunCreation\Views\OKBAlgorithmView.Designer.cs">
+      <DependentUpon>OKBAlgorithmView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="RunCreation\Views\OKBExperimentUploadView.cs" />
+    <Compile Include="RunCreation\Views\OKBExperimentUploadView.Designer.cs">
+      <DependentUpon>OKBExperimentUploadView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="RunCreation\Views\OKBProblemView.cs" />
+    <Compile Include="RunCreation\Views\OKBProblemView.Designer.cs">
+      <DependentUpon>OKBProblemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="RunCreation\Views\OKBRunView.cs" />
+    <Compile Include="RunCreation\Views\OKBRunView.Designer.cs">
+      <DependentUpon>OKBRunView.cs</DependentUpon>
+    </Compile>
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Access.Views\3.3\HeuristicLab.Clients.Access.Views-3.3.csproj">
+      <Project>{FE856595-64CD-46DA-9CD2-FFF3E6B0D4F2}</Project>
+      <Name>HeuristicLab.Clients.Access.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Access\3.3\HeuristicLab.Clients.Access-3.3.csproj">
+      <Project>{494F87F4-0F25-4D33-A382-10CDB2174D48}</Project>
+      <Name>HeuristicLab.Clients.Access-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.OKB\3.3\HeuristicLab.Clients.OKB-3.3.csproj">
+      <Project>{73857A9C-9706-4B72-8D9C-210B5B6A5691}</Project>
+      <Name>HeuristicLab.Clients.OKB-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization.Views\3.3\HeuristicLab.Optimization.Views-3.3.csproj">
+      <Project>{662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2}</Project>
+      <Name>HeuristicLab.Optimization.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimizer\3.3\HeuristicLab.Optimizer-3.3.csproj">
+      <Project>{C664305E-497C-4533-A140-967DEDB05C19}</Project>
+      <Name>HeuristicLab.Optimizer-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Plugin.cs.frame	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Plugin.cs.frame	(revision 8055)
@@ -0,0 +1,47 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You 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.Views plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.Clients.OKB.Views", "3.3.6.$WCREV$")]
+  [PluginFile("HeuristicLab.Clients.OKB.Views-3.3.dll", PluginFileType.Assembly)]  
+  [PluginDependency("HeuristicLab.Clients.OKB", "3.3")]
+  [PluginDependency("HeuristicLab.Clients.Access", "3.3")]
+  [PluginDependency("HeuristicLab.Clients.Access.Views", "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 HeuristicLabClientsOKBViewsPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 8055)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Views")]
+[assembly: AssemblyDescription("HeuristicLab OKB client views")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2012 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("95419B23-FB4A-4A71-AE1B-EA1931758E33")]
+
+// 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.6.$WCREV$")]
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/QueryMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/QueryMenuItem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/QueryMenuItem.cs	(revision 8055)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  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() {
+      MainFormManager.MainForm.ShowContent(QueryClient.Instance);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,133 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  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.BackColor = System.Drawing.Color.NavajoWhite;
+      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, 31);
+      this.label.Name = "label";
+      this.label.Size = new System.Drawing.Size(15, 296);
+      this.label.TabIndex = 0;
+      this.label.Text = "L\r\nA\r\nB\r\nE\r\nL\r\n";
+      this.label.TextAlign = System.Drawing.ContentAlignment.TopCenter;
+      // 
+      // CombinedFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.AutoScroll = true;
+      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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.cs	(revision 8055)
@@ -0,0 +1,135 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [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);
+      filtersComboBox.DataSource = QueryClient.Instance.Filters.ToList();
+      filtersComboBox.DisplayMember = "Label";
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      RemoveFilters();
+      label.Text = string.Empty;
+      if (Content != null) {
+        string nl = Environment.NewLine;
+        label.Text = Content.Operation == BooleanOperation.And ? "A" + nl + "N" + nl + "D" : "O" + nl + "R";
+
+        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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,107 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  partial class EqualityComparisonBoolFilterView {
+    /// <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();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.valueComboBox);
+      // 
+      // valueComboBox
+      // 
+      this.valueComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | 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(3, 2);
+      this.valueComboBox.Name = "valueComboBox";
+      this.valueComboBox.Size = new System.Drawing.Size(280, 21);
+      this.valueComboBox.TabIndex = 0;
+      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.Name = "NameEqualityComparisonBoolFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox valueComboBox;
+
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.cs	(revision 8055)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [View("EqualityComparisonBoolFilter View")]
+  [Content(typeof(EqualityComparisonBoolFilter), true)]
+  public partial class EqualityComparisonBoolFilterView : EqualityComparisonFilterView {
+    public new EqualityComparisonBoolFilter Content {
+      get { return (EqualityComparisonBoolFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public EqualityComparisonBoolFilterView() {
+      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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,105 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  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();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.comparisonComboBox);
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      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(3, 2);
+      this.comparisonComboBox.Name = "comparisonComboBox";
+      this.comparisonComboBox.Size = new System.Drawing.Size(100, 21);
+      this.comparisonComboBox.TabIndex = 0;
+      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.Name = "EqualityComparisonFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.ComboBox comparisonComboBox;
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.cs	(revision 8055)
@@ -0,0 +1,63 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,121 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  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.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // label
+      // 
+      this.label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.label.Location = new System.Drawing.Point(3, 2);
+      this.label.Name = "label";
+      this.label.Size = new System.Drawing.Size(94, 20);
+      this.label.TabIndex = 0;
+      this.label.Text = "Label";
+      this.label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.label);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
+      this.splitContainer1.Size = new System.Drawing.Size(500, 24);
+      this.splitContainer1.SplitterDistance = 100;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // splitContainer2
+      // 
+      this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer2.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer2.Name = "splitContainer2";
+      this.splitContainer2.Size = new System.Drawing.Size(396, 24);
+      this.splitContainer2.SplitterDistance = 106;
+      this.splitContainer2.TabIndex = 0;
+      // 
+      // FilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer1);
+      this.Name = "FilterView";
+      this.Size = new System.Drawing.Size(500, 24);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.Label label;
+    protected System.Windows.Forms.SplitContainer splitContainer1;
+    protected System.Windows.Forms.SplitContainer splitContainer2;
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.cs	(revision 8055)
@@ -0,0 +1,49 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,116 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  partial class OrdinalComparisonDateTimeFilterView {
+    /// <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.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.valueTextBox);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(3, 2);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(280, 20);
+      this.valueTextBox.TabIndex = 0;
+      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;
+      // 
+      // NameOrdinalComparisonDateTimeFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "NameOrdinalComparisonDateTimeFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+
+
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.cs	(revision 8055)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [View("OrdinalComparisonDateTimeFilter View")]
+  [Content(typeof(OrdinalComparisonDateTimeFilter), true)]
+  public partial class OrdinalComparisonDateTimeFilterView : OrdinalComparisonFilterView {
+    public new OrdinalComparisonDateTimeFilter Content {
+      get { return (OrdinalComparisonDateTimeFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OrdinalComparisonDateTimeFilterView() {
+      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) {
+      DateTime val;
+      if (!DateTime.TryParse(valueTextBox.Text, out val)) {
+        e.Cancel = true;
+        errorProvider.SetError(valueTextBox, "Invalid DateTime Value");
+        valueTextBox.SelectAll();
+      }
+    }
+    private void valueTextBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = DateTime.Parse(valueTextBox.Text);
+        errorProvider.SetError(valueTextBox, string.Empty);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,116 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  partial class OrdinalComparisonDoubleFilterView {
+    /// <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.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.valueTextBox);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(3, 2);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(280, 20);
+      this.valueTextBox.TabIndex = 0;
+      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.Name = "NameOrdinalComparisonDoubleFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+
+
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.cs	(revision 8055)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [View("OrdinalComparisonDoubleFilter View")]
+  [Content(typeof(OrdinalComparisonDoubleFilter), true)]
+  public partial class OrdinalComparisonDoubleFilterView : OrdinalComparisonFilterView {
+    public new OrdinalComparisonDoubleFilter Content {
+      get { return (OrdinalComparisonDoubleFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OrdinalComparisonDoubleFilterView() {
+      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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,109 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  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();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.comparisonComboBox);
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      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(3, 2);
+      this.comparisonComboBox.Name = "comparisonComboBox";
+      this.comparisonComboBox.Size = new System.Drawing.Size(100, 21);
+      this.comparisonComboBox.TabIndex = 0;
+      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.Name = "OrdinalComparisonFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.ComboBox comparisonComboBox;
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.cs	(revision 8055)
@@ -0,0 +1,80 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,116 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  partial class OrdinalComparisonFloatFilterView {
+    /// <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.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.valueTextBox);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(3, 2);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(280, 20);
+      this.valueTextBox.TabIndex = 0;
+      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;
+      // 
+      // NameOrdinalComparisonFloatFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "NameOrdinalComparisonFloatFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+
+
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.cs	(revision 8055)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [View("OrdinalComparisonFloatFilter View")]
+  [Content(typeof(OrdinalComparisonFloatFilter), true)]
+  public partial class OrdinalComparisonFloatFilterView : OrdinalComparisonFilterView {
+    public new OrdinalComparisonFloatFilter Content {
+      get { return (OrdinalComparisonFloatFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OrdinalComparisonFloatFilterView() {
+      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) {
+      float val;
+      if (!float.TryParse(valueTextBox.Text, out val)) {
+        e.Cancel = true;
+        errorProvider.SetError(valueTextBox, "Invalid Float Value");
+        valueTextBox.SelectAll();
+      }
+    }
+    private void valueTextBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = float.Parse(valueTextBox.Text);
+        errorProvider.SetError(valueTextBox, string.Empty);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,116 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  partial class OrdinalComparisonIntFilterView {
+    /// <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.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.valueTextBox);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(3, 2);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(280, 20);
+      this.valueTextBox.TabIndex = 0;
+      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;
+      // 
+      // OrdinalComparisonIntFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "OrdinalComparisonIntFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+
+
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.cs	(revision 8055)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [View("OrdinalComparisonIntFilter View")]
+  [Content(typeof(OrdinalComparisonIntFilter), true)]
+  public partial class OrdinalComparisonIntFilterView : OrdinalComparisonFilterView {
+    public new OrdinalComparisonIntFilter Content {
+      get { return (OrdinalComparisonIntFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OrdinalComparisonIntFilterView() {
+      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) {
+      int val;
+      if (!int.TryParse(valueTextBox.Text, out val)) {
+        e.Cancel = true;
+        errorProvider.SetError(valueTextBox, "Invalid Int Value");
+        valueTextBox.SelectAll();
+      }
+    }
+    private void valueTextBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = int.Parse(valueTextBox.Text);
+        errorProvider.SetError(valueTextBox, string.Empty);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,116 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  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.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.valueTextBox);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(3, 2);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(280, 20);
+      this.valueTextBox.TabIndex = 0;
+      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.Name = "OrdinalComparisonLongFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+
+
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.cs	(revision 8055)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,121 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  partial class OrdinalComparisonPercentFilterView {
+    /// <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.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // label
+      // 
+      this.label.BackColor = System.Drawing.SystemColors.Control;
+      // 
+      // splitContainer1
+      // 
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.valueTextBox);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(3, 2);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(280, 20);
+      this.valueTextBox.TabIndex = 0;
+      this.valueTextBox.Text = "%";
+      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;
+      // 
+      // OrdinalComparisonPercentFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "OrdinalComparisonPercentFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+
+
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.cs	(revision 8055)
@@ -0,0 +1,88 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [View("OrdinalComparisonPercentFilterView View")]
+  [Content(typeof(OrdinalComparisonPercentFilter), true)]
+  public partial class OrdinalComparisonPercentFilterView : OrdinalComparisonFilterView {
+    public new OrdinalComparisonPercentFilter Content {
+      get { return (OrdinalComparisonPercentFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OrdinalComparisonPercentFilterView() {
+      InitializeComponent();
+      errorProvider.SetIconAlignment(valueTextBox, ErrorIconAlignment.MiddleLeft);
+      errorProvider.SetIconPadding(valueTextBox, 2);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      if (Content == null) {
+        valueTextBox.Text = "%";
+      } else if (Content.Value == 0.0) {
+        valueTextBox.Text = "0 %";
+      } else {
+        valueTextBox.Text = 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) {
+      HeuristicLab.Data.IStringConvertibleValue p = new HeuristicLab.Data.PercentValue();
+
+      string errorMessage;
+      if (!p.Validate(valueTextBox.Text, out errorMessage)) {
+        e.Cancel = true;
+        errorProvider.SetError(valueTextBox, "Invalid Percent Value");
+        valueTextBox.SelectAll();
+      }
+    }
+    private void valueTextBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        HeuristicLab.Data.IStringConvertibleValue p = new HeuristicLab.Data.PercentValue();
+
+        p.SetValue(valueTextBox.Text);
+        Content.Value = ((HeuristicLab.Data.PercentValue)p).Value;
+        errorProvider.SetError(valueTextBox, string.Empty);
+        valueTextBox.Text = p.GetValue();
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,116 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  partial class OrdinalComparisonTimeSpanFilterView {
+    /// <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.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.valueTextBox);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(3, 2);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(280, 20);
+      this.valueTextBox.TabIndex = 0;
+      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;
+      // 
+      // NameOrdinalComparisonDateTimeFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "NameOrdinalComparisonDateTimeFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+
+
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.cs	(revision 8055)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [View("OrdinalComparisonTimeSpanFilterView View")]
+  [Content(typeof(OrdinalComparisonTimeSpanFilter), true)]
+  public partial class OrdinalComparisonTimeSpanFilterView : OrdinalComparisonFilterView {
+    public new OrdinalComparisonTimeSpanFilter Content {
+      get { return (OrdinalComparisonTimeSpanFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OrdinalComparisonTimeSpanFilterView() {
+      InitializeComponent();
+      errorProvider.SetIconAlignment(valueTextBox, ErrorIconAlignment.MiddleLeft);
+      errorProvider.SetIconPadding(valueTextBox, 2);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      if (Content == null) {
+        valueTextBox.Text = string.Empty;
+      } else if (Content.Value == 0) {
+        valueTextBox.Text = "00:00:00";
+      } else {
+        valueTextBox.Text = TimeSpan.FromSeconds(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) {
+      HeuristicLab.Data.IStringConvertibleValue tsv = new HeuristicLab.Data.TimeSpanValue();
+
+      string errorMessage;
+      if (!tsv.Validate(valueTextBox.Text, out errorMessage)) {
+        e.Cancel = true;
+        errorProvider.SetError(valueTextBox, "Invalid TimeSpan Value");
+        valueTextBox.SelectAll();
+      }
+    }
+    private void valueTextBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        HeuristicLab.Data.IStringConvertibleValue tsv = new HeuristicLab.Data.TimeSpanValue();
+
+        tsv.SetValue(valueTextBox.Text);
+        Content.Value = (long)((HeuristicLab.Data.TimeSpanValue)tsv).Value.TotalSeconds;
+        errorProvider.SetError(valueTextBox, string.Empty);
+        valueTextBox.Text = tsv.GetValue();
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.Designer.cs	(revision 8055)
@@ -0,0 +1,379 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  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.runCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.filterTabControl = new System.Windows.Forms.TabControl();
+      this.filterTabPage = new System.Windows.Forms.TabPage();
+      this.filtersGroupBox = new System.Windows.Forms.GroupBox();
+      this.filterPanel = new System.Windows.Forms.Panel();
+      this.refreshFiltersButton = new System.Windows.Forms.Button();
+      this.constraintsTabPage = new System.Windows.Forms.TabPage();
+      this.deselectAllButton = new System.Windows.Forms.Button();
+      this.selectAllButton = new System.Windows.Forms.Button();
+      this.constraintsCheckedListBox = new System.Windows.Forms.CheckedListBox();
+      this.resultsGroupBox = new System.Windows.Forms.GroupBox();
+      this.includeBinaryValuesCheckBox = new System.Windows.Forms.CheckBox();
+      this.resultsInfoPanel = new System.Windows.Forms.Panel();
+      this.abortButton = new System.Windows.Forms.Button();
+      this.resultsProgressBar = new System.Windows.Forms.ProgressBar();
+      this.resultsInfoLabel = new System.Windows.Forms.Label();
+      this.filtersInfoPanel = new System.Windows.Forms.Panel();
+      this.filtersInfoLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.filterTabControl.SuspendLayout();
+      this.filterTabPage.SuspendLayout();
+      this.filtersGroupBox.SuspendLayout();
+      this.constraintsTabPage.SuspendLayout();
+      this.resultsGroupBox.SuspendLayout();
+      this.resultsInfoPanel.SuspendLayout();
+      this.filtersInfoPanel.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);
+      // 
+      // 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(826, 223);
+      this.runCollectionView.TabIndex = 3;
+      // 
+      // 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.filterTabControl);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.resultsGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(838, 567);
+      this.splitContainer.SplitterDistance = 282;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // filterTabControl
+      // 
+      this.filterTabControl.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.filterTabControl.Controls.Add(this.filterTabPage);
+      this.filterTabControl.Controls.Add(this.constraintsTabPage);
+      this.filterTabControl.Location = new System.Drawing.Point(3, 3);
+      this.filterTabControl.Name = "filterTabControl";
+      this.filterTabControl.SelectedIndex = 0;
+      this.filterTabControl.Size = new System.Drawing.Size(832, 276);
+      this.filterTabControl.TabIndex = 1;
+      // 
+      // filterTabPage
+      // 
+      this.filterTabPage.Controls.Add(this.filtersGroupBox);
+      this.filterTabPage.Location = new System.Drawing.Point(4, 22);
+      this.filterTabPage.Name = "filterTabPage";
+      this.filterTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.filterTabPage.Size = new System.Drawing.Size(824, 250);
+      this.filterTabPage.TabIndex = 0;
+      this.filterTabPage.Text = "Filters";
+      this.filterTabPage.UseVisualStyleBackColor = true;
+      // 
+      // 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.Controls.Add(this.refreshFiltersButton);
+      this.filtersGroupBox.Location = new System.Drawing.Point(6, 6);
+      this.filtersGroupBox.Name = "filtersGroupBox";
+      this.filtersGroupBox.Size = new System.Drawing.Size(812, 238);
+      this.filtersGroupBox.TabIndex = 0;
+      this.filtersGroupBox.TabStop = false;
+      this.filtersGroupBox.Text = "Filters";
+      // 
+      // 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(770, 213);
+      this.filterPanel.TabIndex = 1;
+      // 
+      // refreshFiltersButton
+      // 
+      this.refreshFiltersButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.refreshFiltersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshFiltersButton.Location = new System.Drawing.Point(782, 21);
+      this.refreshFiltersButton.Name = "refreshFiltersButton";
+      this.refreshFiltersButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshFiltersButton.TabIndex = 0;
+      this.refreshFiltersButton.UseVisualStyleBackColor = true;
+      this.refreshFiltersButton.Click += new System.EventHandler(this.refreshFiltersButton_Click);
+      // 
+      // constraintsTabPage
+      // 
+      this.constraintsTabPage.Controls.Add(this.deselectAllButton);
+      this.constraintsTabPage.Controls.Add(this.selectAllButton);
+      this.constraintsTabPage.Controls.Add(this.constraintsCheckedListBox);
+      this.constraintsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.constraintsTabPage.Name = "constraintsTabPage";
+      this.constraintsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.constraintsTabPage.Size = new System.Drawing.Size(824, 250);
+      this.constraintsTabPage.TabIndex = 1;
+      this.constraintsTabPage.Text = "Limit Downloaded Values";
+      this.constraintsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // deselectAllButton
+      // 
+      this.deselectAllButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.deselectAllButton.Location = new System.Drawing.Point(88, 221);
+      this.deselectAllButton.Name = "deselectAllButton";
+      this.deselectAllButton.Size = new System.Drawing.Size(75, 23);
+      this.deselectAllButton.TabIndex = 2;
+      this.deselectAllButton.Text = "Deselect all";
+      this.deselectAllButton.UseVisualStyleBackColor = true;
+      this.deselectAllButton.Click += new System.EventHandler(this.deselectAllButton_Click);
+      // 
+      // selectAllButton
+      // 
+      this.selectAllButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.selectAllButton.Location = new System.Drawing.Point(6, 221);
+      this.selectAllButton.Name = "selectAllButton";
+      this.selectAllButton.Size = new System.Drawing.Size(75, 23);
+      this.selectAllButton.TabIndex = 1;
+      this.selectAllButton.Text = "Select all";
+      this.selectAllButton.UseVisualStyleBackColor = true;
+      this.selectAllButton.Click += new System.EventHandler(this.selectAllButton_Click);
+      // 
+      // constraintsCheckedListBox
+      // 
+      this.constraintsCheckedListBox.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.constraintsCheckedListBox.CheckOnClick = true;
+      this.constraintsCheckedListBox.FormattingEnabled = true;
+      this.constraintsCheckedListBox.Location = new System.Drawing.Point(6, 6);
+      this.constraintsCheckedListBox.Name = "constraintsCheckedListBox";
+      this.constraintsCheckedListBox.Size = new System.Drawing.Size(812, 214);
+      this.constraintsCheckedListBox.Sorted = true;
+      this.constraintsCheckedListBox.TabIndex = 0;
+      // 
+      // 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.includeBinaryValuesCheckBox);
+      this.resultsGroupBox.Controls.Add(this.refreshResultsButton);
+      this.resultsGroupBox.Controls.Add(this.runCollectionView);
+      this.resultsGroupBox.Location = new System.Drawing.Point(0, 3);
+      this.resultsGroupBox.Name = "resultsGroupBox";
+      this.resultsGroupBox.Size = new System.Drawing.Size(838, 278);
+      this.resultsGroupBox.TabIndex = 0;
+      this.resultsGroupBox.TabStop = false;
+      this.resultsGroupBox.Text = "Results";
+      // 
+      // includeBinaryValuesCheckBox
+      // 
+      this.includeBinaryValuesCheckBox.AutoSize = true;
+      this.includeBinaryValuesCheckBox.Checked = true;
+      this.includeBinaryValuesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.includeBinaryValuesCheckBox.Location = new System.Drawing.Point(53, 24);
+      this.includeBinaryValuesCheckBox.Name = "includeBinaryValuesCheckBox";
+      this.includeBinaryValuesCheckBox.Size = new System.Drawing.Size(128, 17);
+      this.includeBinaryValuesCheckBox.TabIndex = 1;
+      this.includeBinaryValuesCheckBox.Text = "&Include Binary Values";
+      this.includeBinaryValuesCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // resultsInfoPanel
+      // 
+      this.resultsInfoPanel.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
+      this.resultsInfoPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.resultsInfoPanel.Controls.Add(this.abortButton);
+      this.resultsInfoPanel.Controls.Add(this.resultsProgressBar);
+      this.resultsInfoPanel.Controls.Add(this.resultsInfoLabel);
+      this.resultsInfoPanel.Location = new System.Drawing.Point(238, 339);
+      this.resultsInfoPanel.Name = "resultsInfoPanel";
+      this.resultsInfoPanel.Size = new System.Drawing.Size(362, 87);
+      this.resultsInfoPanel.TabIndex = 1;
+      this.resultsInfoPanel.Visible = false;
+      // 
+      // abortButton
+      // 
+      this.abortButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.abortButton.Location = new System.Drawing.Point(3, 58);
+      this.abortButton.Name = "abortButton";
+      this.abortButton.Size = new System.Drawing.Size(354, 23);
+      this.abortButton.TabIndex = 2;
+      this.abortButton.Text = "&Abort";
+      this.abortButton.UseVisualStyleBackColor = true;
+      this.abortButton.Click += new System.EventHandler(this.abortButton_Click);
+      // 
+      // resultsProgressBar
+      // 
+      this.resultsProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.resultsProgressBar.Enabled = false;
+      this.resultsProgressBar.Location = new System.Drawing.Point(3, 29);
+      this.resultsProgressBar.Name = "resultsProgressBar";
+      this.resultsProgressBar.Size = new System.Drawing.Size(354, 23);
+      this.resultsProgressBar.Step = 1;
+      this.resultsProgressBar.TabIndex = 1;
+      // 
+      // resultsInfoLabel
+      // 
+      this.resultsInfoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.resultsInfoLabel.Enabled = false;
+      this.resultsInfoLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.resultsInfoLabel.Location = new System.Drawing.Point(3, 3);
+      this.resultsInfoLabel.Name = "resultsInfoLabel";
+      this.resultsInfoLabel.Size = new System.Drawing.Size(354, 23);
+      this.resultsInfoLabel.TabIndex = 0;
+      this.resultsInfoLabel.Text = "Loading ...";
+      this.resultsInfoLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+      // 
+      // filtersInfoPanel
+      // 
+      this.filtersInfoPanel.Anchor = System.Windows.Forms.AnchorStyles.Top;
+      this.filtersInfoPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.filtersInfoPanel.Controls.Add(this.filtersInfoLabel);
+      this.filtersInfoPanel.Enabled = false;
+      this.filtersInfoPanel.Location = new System.Drawing.Point(238, 136);
+      this.filtersInfoPanel.Name = "filtersInfoPanel";
+      this.filtersInfoPanel.Size = new System.Drawing.Size(362, 33);
+      this.filtersInfoPanel.TabIndex = 0;
+      this.filtersInfoPanel.Visible = false;
+      // 
+      // filtersInfoLabel
+      // 
+      this.filtersInfoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.filtersInfoLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.filtersInfoLabel.Location = new System.Drawing.Point(3, 4);
+      this.filtersInfoLabel.Name = "filtersInfoLabel";
+      this.filtersInfoLabel.Size = new System.Drawing.Size(354, 23);
+      this.filtersInfoLabel.TabIndex = 0;
+      this.filtersInfoLabel.Text = "Loading Filters ...";
+      this.filtersInfoLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+      // 
+      // QueryView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.filtersInfoPanel);
+      this.Controls.Add(this.resultsInfoPanel);
+      this.Controls.Add(this.splitContainer);
+      this.Name = "QueryView";
+      this.Size = new System.Drawing.Size(838, 567);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.filterTabControl.ResumeLayout(false);
+      this.filterTabPage.ResumeLayout(false);
+      this.filtersGroupBox.ResumeLayout(false);
+      this.constraintsTabPage.ResumeLayout(false);
+      this.resultsGroupBox.ResumeLayout(false);
+      this.resultsGroupBox.PerformLayout();
+      this.resultsInfoPanel.ResumeLayout(false);
+      this.filtersInfoPanel.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button refreshResultsButton;
+    private System.Windows.Forms.ToolTip toolTip;
+    private HeuristicLab.Optimization.Views.RunCollectionView runCollectionView;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.GroupBox filtersGroupBox;
+    private System.Windows.Forms.GroupBox resultsGroupBox;
+    private System.Windows.Forms.Panel filterPanel;
+    private System.Windows.Forms.Panel resultsInfoPanel;
+    private System.Windows.Forms.ProgressBar resultsProgressBar;
+    private System.Windows.Forms.Label resultsInfoLabel;
+    private System.Windows.Forms.Button abortButton;
+    private System.Windows.Forms.Panel filtersInfoPanel;
+    private System.Windows.Forms.Label filtersInfoLabel;
+    private System.Windows.Forms.Button refreshFiltersButton;
+    private System.Windows.Forms.CheckBox includeBinaryValuesCheckBox;
+    private System.Windows.Forms.TabControl filterTabControl;
+    private System.Windows.Forms.TabPage filterTabPage;
+    private System.Windows.Forms.TabPage constraintsTabPage;
+    private System.Windows.Forms.Button deselectAllButton;
+    private System.Windows.Forms.Button selectAllButton;
+    private System.Windows.Forms.CheckedListBox constraintsCheckedListBox;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.cs	(revision 8055)
@@ -0,0 +1,258 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.Query {
+  [View("OKB Query")]
+  [Content(typeof(QueryClient), true)]
+  public sealed partial class QueryView : AsynchronousContentView {
+    private CancellationTokenSource cancellationTokenSource;
+    private CombinedFilterView combinedFilterView;
+
+    public new QueryClient Content {
+      get { return (QueryClient)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public QueryView() {
+      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();
+      CreateFilterView();
+      runCollectionView.Content = null;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      resultsGroupBox.Enabled = combinedFilterView != null;
+    }
+
+    #region Load Results
+    private void LoadResultsAsync(int batchSize) {
+      bool includeBinaryValues = includeBinaryValuesCheckBox.Checked;
+      IEnumerable<ValueName> valueNames = constraintsCheckedListBox.CheckedItems.Cast<ValueName>();
+
+      Cursor = Cursors.AppStarting;
+      resultsInfoLabel.Text = "Loading Results ...";
+      resultsProgressBar.Value = 0;
+      resultsProgressBar.Step = batchSize;
+      abortButton.Enabled = true;
+      resultsInfoPanel.Visible = true;
+      splitContainer.Enabled = false;
+      cancellationTokenSource = new CancellationTokenSource();
+      CancellationToken cancellationToken = cancellationTokenSource.Token;
+
+      Task task = Task.Factory.StartNew(() => {
+        var ids = QueryClient.Instance.GetRunIds(combinedFilterView.Content);
+        int idsCount = ids.Count();
+
+        Invoke(new Action(() => {
+          resultsInfoLabel.Text = "Loaded 0 of " + idsCount.ToString() + " Results ...";
+          resultsProgressBar.Maximum = idsCount;
+        }));
+
+        RunCollection runs = new RunCollection();
+        runCollectionView.Content = runs;
+        while (ids.Count() > 0) {
+          cancellationToken.ThrowIfCancellationRequested();
+          if (AllValueNamesChecked()) {
+            runs.AddRange(QueryClient.Instance.GetRuns(ids.Take(batchSize), includeBinaryValues).Select(x => ConvertToOptimizationRun(x)));
+          } else {
+            runs.AddRange(QueryClient.Instance.GetRunsWithValues(ids.Take(batchSize), includeBinaryValues, valueNames).Select(x => ConvertToOptimizationRun(x)));
+          }
+          ids = ids.Skip(batchSize);
+          Invoke(new Action(() => {
+            resultsInfoLabel.Text = "Loaded " + runs.Count + " of " + idsCount.ToString() + " Results ...";
+            resultsProgressBar.PerformStep();
+          }));
+        }
+      }, cancellationToken);
+      task.ContinueWith(t => {
+        Invoke(new Action(() => {
+          cancellationTokenSource.Dispose();
+          cancellationTokenSource = null;
+          resultsInfoPanel.Visible = false;
+          splitContainer.Enabled = true;
+          this.Cursor = Cursors.Default;
+          SetEnabledStateOfControls();
+          try {
+            t.Wait();
+          }
+          catch (AggregateException ex) {
+            try {
+              ex.Flatten().Handle(x => x is OperationCanceledException);
+            }
+            catch (AggregateException remaining) {
+              if (remaining.InnerExceptions.Count == 1) ErrorHandling.ShowErrorDialog(this, "Refresh results failed.", remaining.InnerExceptions[0]);
+              else ErrorHandling.ShowErrorDialog(this, "Refresh results failed.", remaining);
+            }
+          }
+        }));
+      });
+    }
+    #endregion
+
+    private void Content_Refreshing(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_Refreshing), sender, e);
+      } else {
+        Cursor = Cursors.AppStarting;
+        filtersInfoPanel.Visible = true;
+        splitContainer.Enabled = false;
+      }
+    }
+    private void Content_Refreshed(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_Refreshed), sender, e);
+      } else {
+        CreateFilterView();
+        CreateConstraintsView();
+        filtersInfoPanel.Visible = false;
+        splitContainer.Enabled = true;
+        Cursor = Cursors.Default;
+        SetEnabledStateOfControls();
+      }
+    }
+
+    private void refreshFiltersButton_Click(object sender, EventArgs e) {
+      Content.RefreshAsync(new Action<Exception>((Exception ex) => ErrorHandling.ShowErrorDialog(this, "Refresh failed.", ex)));
+    }
+
+    private void refreshResultsButton_Click(object sender, EventArgs e) {
+      LoadResultsAsync(10);
+    }
+
+    private void abortButton_Click(object sender, EventArgs e) {
+      if (cancellationTokenSource != null) cancellationTokenSource.Cancel();
+      abortButton.Enabled = false;
+    }
+
+    private void CreateFilterView() {
+      combinedFilterView = null;
+      filterPanel.Controls.Clear();
+      if ((Content != null) && (Content.Filters != null)) {
+        CombinedFilter filter = Content.Filters.OfType<CombinedFilter>().Where(x => x.Operation == BooleanOperation.And).FirstOrDefault();
+        if (filter != null) {
+          combinedFilterView = (CombinedFilterView)MainFormManager.CreateView(typeof(CombinedFilterView));
+          combinedFilterView.Content = (CombinedFilter)filter.Clone();
+          Control control = (Control)combinedFilterView;
+          control.Dock = DockStyle.Fill;
+          filterPanel.Controls.Add(control);
+        }
+      }
+    }
+
+    private void CreateConstraintsView() {
+      constraintsCheckedListBox.Items.Clear();
+      constraintsCheckedListBox.Items.AddRange(QueryClient.Instance.ValueNames.ToArray());
+      SetCheckedState(true);
+    }
+
+    private Optimization.IRun ConvertToOptimizationRun(Run run) {
+      Optimization.Run optRun = new Optimization.Run();
+      foreach (Value value in run.ParameterValues)
+        optRun.Parameters.Add(value.Name, ConvertToItem(value));
+      foreach (Value value in run.ResultValues)
+        optRun.Results.Add(value.Name, ConvertToItem(value));
+      return optRun;
+    }
+
+    private IItem ConvertToItem(Value value) {
+      if (value is BinaryValue) {
+        IItem item = null;
+        BinaryValue binaryValue = (BinaryValue)value;
+        if (binaryValue.Value != null) {
+          using (MemoryStream stream = new MemoryStream(binaryValue.Value)) {
+            try {
+              item = XmlParser.Deserialize<IItem>(stream);
+            }
+            catch (Exception) { }
+            stream.Close();
+          }
+        }
+        return item != null ? item : new Data.StringValue(value.DataType.Name);
+      } else if (value is BoolValue) {
+        return new Data.BoolValue(((BoolValue)value).Value);
+      } else if (value is FloatValue) {
+        return new Data.DoubleValue(((FloatValue)value).Value);
+      } else if (value is PercentValue) {
+        return new Data.PercentValue(((PercentValue)value).Value);
+      } else if (value is DoubleValue) {
+        return new Data.DoubleValue(((DoubleValue)value).Value);
+      } else if (value is IntValue) {
+        return new Data.IntValue((int)((IntValue)value).Value);
+      } else if (value is LongValue) {
+        return new Data.IntValue((int)((LongValue)value).Value);
+      } else if (value is StringValue) {
+        return new Data.StringValue(((StringValue)value).Value);
+      } else if (value is TimeSpanValue) {
+        return new Data.TimeSpanValue(TimeSpan.FromSeconds((long)((TimeSpanValue)value).Value));
+      }
+      return null;
+    }
+
+    private void SetCheckedState(bool val) {
+      for (int i = 0; i < constraintsCheckedListBox.Items.Count; i++) {
+        constraintsCheckedListBox.SetItemChecked(i, val);
+      }
+    }
+
+    private bool AllValueNamesChecked() {
+      return constraintsCheckedListBox.Items.Count == constraintsCheckedListBox.CheckedItems.Count;
+    }
+
+    private void selectAllButton_Click(object sender, EventArgs e) {
+      SetCheckedState(true);
+    }
+
+    private void deselectAllButton_Click(object sender, EventArgs e) {
+      SetCheckedState(false);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,125 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  partial class StringComparisonAvailableValuesFilterView {
+    /// <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.valueComboBox = new System.Windows.Forms.ComboBox();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.comparisonComboBox);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.valueComboBox);
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.comparisonComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.comparisonComboBox.FormattingEnabled = true;
+      this.comparisonComboBox.Items.AddRange(new object[] {
+            "=",
+            "<>",
+            "contains",
+            "not contains",
+            "like",
+            "not like"});
+      this.comparisonComboBox.Location = new System.Drawing.Point(3, 2);
+      this.comparisonComboBox.Name = "comparisonComboBox";
+      this.comparisonComboBox.Size = new System.Drawing.Size(100, 21);
+      this.comparisonComboBox.TabIndex = 0;
+      this.comparisonComboBox.SelectedIndexChanged += new System.EventHandler(this.comparisonComboBox_SelectedIndexChanged);
+      // 
+      // valueComboBox
+      // 
+      this.valueComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueComboBox.FormattingEnabled = true;
+      this.valueComboBox.Location = new System.Drawing.Point(3, 2);
+      this.valueComboBox.MaxDropDownItems = 32;
+      this.valueComboBox.Name = "valueComboBox";
+      this.valueComboBox.Size = new System.Drawing.Size(280, 21);
+      this.valueComboBox.TabIndex = 0;
+      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.Name = "SetComparisonStringAvailableValuesFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox comparisonComboBox;
+    private System.Windows.Forms.ComboBox valueComboBox;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.cs	(revision 8055)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [View("StringComparisonAvailableValuesFilter View")]
+  [Content(typeof(StringComparisonAvailableValuesFilter), true)]
+  public partial class StringComparisonAvailableValuesFilterView : FilterView {
+    public new StringComparisonAvailableValuesFilter Content {
+      get { return (StringComparisonAvailableValuesFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public StringComparisonAvailableValuesFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      comparisonComboBox.SelectedIndex = -1;
+      if (Content != null) {
+        if (Content.Comparison == StringComparison.Equal)
+          comparisonComboBox.SelectedItem = "=";
+        else if (Content.Comparison == StringComparison.NotEqual)
+          comparisonComboBox.SelectedItem = "<>";
+        else if (Content.Comparison == StringComparison.Contains)
+          comparisonComboBox.SelectedItem = "contains";
+        else if (Content.Comparison == StringComparison.NotContains)
+          comparisonComboBox.SelectedItem = "not contains";
+        else if (Content.Comparison == StringComparison.Like)
+          comparisonComboBox.SelectedItem = "like";
+        else if (Content.Comparison == StringComparison.NotLike)
+          comparisonComboBox.SelectedItem = "not like";
+      }
+      valueComboBox.DataSource = Content == null ? null : Content.AvailableValues;
+      valueComboBox.Text = Content == null ? string.Empty : Content.Value;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      comparisonComboBox.Enabled = Content != null && !ReadOnly;
+      valueComboBox.Enabled = Content != null && !ReadOnly;
+    }
+
+    private void comparisonComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        if (comparisonComboBox.SelectedItem == "=")
+          Content.Comparison = StringComparison.Equal;
+        else if (comparisonComboBox.SelectedItem == "<>")
+          Content.Comparison = StringComparison.NotEqual;
+        else if (comparisonComboBox.SelectedItem == "contains")
+          Content.Comparison = StringComparison.Contains;
+        else if (comparisonComboBox.SelectedItem == "not contains")
+          Content.Comparison = StringComparison.NotContains;
+        else if (comparisonComboBox.SelectedItem == "like")
+          Content.Comparison = StringComparison.Like;
+        else if (comparisonComboBox.SelectedItem == "not like")
+          Content.Comparison = StringComparison.NotLike;
+      }
+    }
+
+    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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.Designer.cs	(revision 8055)
@@ -0,0 +1,123 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  partial class StringComparisonFilterView {
+    /// <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.valueTextBox = new System.Windows.Forms.TextBox();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // splitContainer2
+      // 
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.comparisonComboBox);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.valueTextBox);
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.comparisonComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.comparisonComboBox.FormattingEnabled = true;
+      this.comparisonComboBox.Items.AddRange(new object[] {
+            "=",
+            "<>",
+            "contains",
+            "not contains",
+            "like",
+            "not like"});
+      this.comparisonComboBox.Location = new System.Drawing.Point(3, 2);
+      this.comparisonComboBox.Name = "comparisonComboBox";
+      this.comparisonComboBox.Size = new System.Drawing.Size(100, 21);
+      this.comparisonComboBox.TabIndex = 0;
+      this.comparisonComboBox.SelectedIndexChanged += new System.EventHandler(this.comparisonComboBox_SelectedIndexChanged);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(3, 2);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(280, 20);
+      this.valueTextBox.TabIndex = 0;
+      this.valueTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.valueTextBox_KeyDown);
+      this.valueTextBox.Validated += new System.EventHandler(this.valueTextBox_Validated);
+      // 
+      // SetComparisonFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "SetComparisonFilterView";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox comparisonComboBox;
+    private System.Windows.Forms.TextBox valueTextBox;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.cs	(revision 8055)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  [View("StringComparisonFilter View")]
+  [Content(typeof(StringComparisonFilter), true)]
+  public partial class StringComparisonFilterView : FilterView {
+    public new StringComparisonFilter Content {
+      get { return (StringComparisonFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public StringComparisonFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      comparisonComboBox.SelectedIndex = -1;
+      if (Content != null) {
+        if (Content.Comparison == StringComparison.Equal)
+          comparisonComboBox.SelectedItem = "=";
+        else if (Content.Comparison == StringComparison.NotEqual)
+          comparisonComboBox.SelectedItem = "<>";
+        else if (Content.Comparison == StringComparison.Contains)
+          comparisonComboBox.SelectedItem = "contains";
+        else if (Content.Comparison == StringComparison.NotContains)
+          comparisonComboBox.SelectedItem = "not contains";
+        else if (Content.Comparison == StringComparison.Like)
+          comparisonComboBox.SelectedItem = "like";
+        else if (Content.Comparison == StringComparison.NotLike)
+          comparisonComboBox.SelectedItem = "not like";
+      }
+      valueTextBox.Text = Content == null ? string.Empty : Content.Value;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      comparisonComboBox.Enabled = Content != null && !ReadOnly;
+      valueTextBox.Enabled = Content != null;
+      valueTextBox.ReadOnly = ReadOnly;
+    }
+
+    private void comparisonComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        if (comparisonComboBox.SelectedItem == "=")
+          Content.Comparison = StringComparison.Equal;
+        else if (comparisonComboBox.SelectedItem == "<>")
+          Content.Comparison = StringComparison.NotEqual;
+        else if (comparisonComboBox.SelectedItem == "contains")
+          Content.Comparison = StringComparison.Contains;
+        else if (comparisonComboBox.SelectedItem == "not contains")
+          Content.Comparison = StringComparison.NotContains;
+        else if (comparisonComboBox.SelectedItem == "like")
+          Content.Comparison = StringComparison.Like;
+        else if (comparisonComboBox.SelectedItem == "not like")
+          Content.Comparison = StringComparison.NotLike;
+      }
+    }
+
+    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: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/CreateFromExperimentMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/CreateFromExperimentMenuItem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/CreateFromExperimentMenuItem.cs	(revision 8055)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.Optimizer;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  internal class CreateFromExperimentMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&Upload Runs from Experiment"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Services", "&OKB" }; }
+    }
+    public override int Position {
+      get { return 4220; }
+    }
+
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      ToolStripItem.Enabled = (activeView != null) && (activeView.Content != null) && ((activeView.Content is Experiment) || (activeView.Content is RunCollection) || (activeView.Content is IOptimizer)) && !activeView.Locked && OKBRoles.CheckUserPermissions();
+    }
+
+    public override void Execute() {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      MainFormManager.MainForm.ShowContent(activeView.Content, typeof(OKBExperimentUploadView));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.Designer.cs	(revision 8055)
@@ -0,0 +1,454 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You 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.Optimization.Views;
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  partial class OKBAlgorithmView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #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.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.problemTabPage = new System.Windows.Forms.TabPage();
+      this.problemViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.openProblemButton = new System.Windows.Forms.Button();
+      this.newProblemButton = new System.Windows.Forms.Button();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.resultsTabPage = new System.Windows.Forms.TabPage();
+      this.resultsView = new HeuristicLab.Optimization.Views.ResultCollectionView();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.storeAlgorithmInEachRunCheckBox = new System.Windows.Forms.CheckBox();
+      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.startButton = new System.Windows.Forms.Button();
+      this.pauseButton = new System.Windows.Forms.Button();
+      this.resetButton = new System.Windows.Forms.Button();
+      this.executionTimeLabel = new System.Windows.Forms.Label();
+      this.executionTimeTextBox = new System.Windows.Forms.TextBox();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.algorithmComboBox = new System.Windows.Forms.ComboBox();
+      this.algorithmLabel = new System.Windows.Forms.Label();
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.cloneAlgorithmButton = new System.Windows.Forms.Button();
+      this.storeRunsAutomaticallyCheckBox = new System.Windows.Forms.CheckBox();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.problemTabPage.SuspendLayout();
+      this.parametersTabPage.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.Location = new System.Drawing.Point(72, 29);
+      this.nameTextBox.Size = new System.Drawing.Size(577, 20);
+      this.nameTextBox.TabIndex = 5;
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.Location = new System.Drawing.Point(3, 32);
+      this.nameLabel.TabIndex = 4;
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(659, 32);
+      this.infoLabel.TabIndex = 6;
+      // 
+      // tabControl
+      // 
+      this.tabControl.AllowDrop = true;
+      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.problemTabPage);
+      this.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Controls.Add(this.resultsTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 55);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(679, 397);
+      this.tabControl.TabIndex = 7;
+      // 
+      // problemTabPage
+      // 
+      this.problemTabPage.AllowDrop = true;
+      this.problemTabPage.Controls.Add(this.problemViewHost);
+      this.problemTabPage.Controls.Add(this.openProblemButton);
+      this.problemTabPage.Controls.Add(this.newProblemButton);
+      this.problemTabPage.Location = new System.Drawing.Point(4, 22);
+      this.problemTabPage.Name = "problemTabPage";
+      this.problemTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.problemTabPage.Size = new System.Drawing.Size(671, 371);
+      this.problemTabPage.TabIndex = 0;
+      this.problemTabPage.Text = "Problem";
+      this.problemTabPage.UseVisualStyleBackColor = true;
+      this.problemTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragDrop);
+      this.problemTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragEnterOver);
+      this.problemTabPage.DragOver += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragEnterOver);
+      // 
+      // problemViewHost
+      // 
+      this.problemViewHost.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.problemViewHost.Caption = "View";
+      this.problemViewHost.Content = null;
+      this.problemViewHost.Enabled = false;
+      this.problemViewHost.Location = new System.Drawing.Point(6, 36);
+      this.problemViewHost.Name = "problemViewHost";
+      this.problemViewHost.ReadOnly = false;
+      this.problemViewHost.Size = new System.Drawing.Size(659, 329);
+      this.problemViewHost.TabIndex = 3;
+      this.problemViewHost.ViewsLabelVisible = true;
+      this.problemViewHost.ViewType = null;
+      // 
+      // openProblemButton
+      // 
+      this.openProblemButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
+      this.openProblemButton.Location = new System.Drawing.Point(36, 6);
+      this.openProblemButton.Name = "openProblemButton";
+      this.openProblemButton.Size = new System.Drawing.Size(24, 24);
+      this.openProblemButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.openProblemButton, "Open Problem");
+      this.openProblemButton.UseVisualStyleBackColor = true;
+      this.openProblemButton.Click += new System.EventHandler(this.openProblemButton_Click);
+      // 
+      // newProblemButton
+      // 
+      this.newProblemButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
+      this.newProblemButton.Location = new System.Drawing.Point(6, 6);
+      this.newProblemButton.Name = "newProblemButton";
+      this.newProblemButton.Size = new System.Drawing.Size(24, 24);
+      this.newProblemButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.newProblemButton, "New Problem");
+      this.newProblemButton.UseVisualStyleBackColor = true;
+      this.newProblemButton.Click += new System.EventHandler(this.newProblemButton_Click);
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.parameterCollectionView);
+      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(671, 371);
+      this.parametersTabPage.TabIndex = 1;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // parameterCollectionView
+      // 
+      this.parameterCollectionView.AllowEditingOfHiddenParameters = false;
+      this.parameterCollectionView.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.parameterCollectionView.Caption = "ParameterCollection View";
+      this.parameterCollectionView.Content = null;
+      this.parameterCollectionView.Location = new System.Drawing.Point(6, 6);
+      this.parameterCollectionView.Name = "parameterCollectionView";
+      this.parameterCollectionView.ReadOnly = false;
+      this.parameterCollectionView.Size = new System.Drawing.Size(659, 359);
+      this.parameterCollectionView.TabIndex = 0;
+      // 
+      // resultsTabPage
+      // 
+      this.resultsTabPage.Controls.Add(this.resultsView);
+      this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.resultsTabPage.Name = "resultsTabPage";
+      this.resultsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.resultsTabPage.Size = new System.Drawing.Size(671, 371);
+      this.resultsTabPage.TabIndex = 2;
+      this.resultsTabPage.Text = "Results";
+      this.resultsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // resultsView
+      // 
+      this.resultsView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.resultsView.Caption = "ResultCollection View";
+      this.resultsView.Content = null;
+      this.resultsView.Location = new System.Drawing.Point(6, 6);
+      this.resultsView.Name = "resultsView";
+      this.resultsView.ReadOnly = true;
+      this.resultsView.Size = new System.Drawing.Size(659, 359);
+      this.resultsView.TabIndex = 0;
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.storeRunsAutomaticallyCheckBox);
+      this.runsTabPage.Controls.Add(this.storeAlgorithmInEachRunCheckBox);
+      this.runsTabPage.Controls.Add(this.runsView);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.runsTabPage.Size = new System.Drawing.Size(671, 371);
+      this.runsTabPage.TabIndex = 3;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // storeAlgorithmInEachRunCheckBox
+      // 
+      this.storeAlgorithmInEachRunCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.storeAlgorithmInEachRunCheckBox.AutoSize = true;
+      this.storeAlgorithmInEachRunCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.storeAlgorithmInEachRunCheckBox.Checked = true;
+      this.storeAlgorithmInEachRunCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.storeAlgorithmInEachRunCheckBox.Location = new System.Drawing.Point(503, 6);
+      this.storeAlgorithmInEachRunCheckBox.Name = "storeAlgorithmInEachRunCheckBox";
+      this.storeAlgorithmInEachRunCheckBox.Size = new System.Drawing.Size(161, 17);
+      this.storeAlgorithmInEachRunCheckBox.TabIndex = 2;
+      this.storeAlgorithmInEachRunCheckBox.Text = "&Store Algorithm in each Run:";
+      this.toolTip.SetToolTip(this.storeAlgorithmInEachRunCheckBox, "Check to store a copy of the algorithm in each run.");
+      this.storeAlgorithmInEachRunCheckBox.UseVisualStyleBackColor = true;
+      this.storeAlgorithmInEachRunCheckBox.CheckedChanged += new System.EventHandler(this.storeAlgorithmInEachRunCheckBox_CheckedChanged);
+      // 
+      // runsView
+      // 
+      this.runsView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.runsView.Caption = "RunCollection View";
+      this.runsView.Content = null;
+      this.runsView.Location = new System.Drawing.Point(6, 6);
+      this.runsView.Name = "runsView";
+      this.runsView.ReadOnly = false;
+      this.runsView.Size = new System.Drawing.Size(659, 359);
+      this.runsView.TabIndex = 0;
+      // 
+      // startButton
+      // 
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.startButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Play;
+      this.startButton.Location = new System.Drawing.Point(0, 458);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(24, 24);
+      this.startButton.TabIndex = 8;
+      this.toolTip.SetToolTip(this.startButton, "Start/Resume Algorithm");
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.startButton_Click);
+      // 
+      // pauseButton
+      // 
+      this.pauseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.pauseButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Pause;
+      this.pauseButton.Location = new System.Drawing.Point(30, 458);
+      this.pauseButton.Name = "pauseButton";
+      this.pauseButton.Size = new System.Drawing.Size(24, 24);
+      this.pauseButton.TabIndex = 9;
+      this.toolTip.SetToolTip(this.pauseButton, "Pause Algorithm");
+      this.pauseButton.UseVisualStyleBackColor = true;
+      this.pauseButton.Click += new System.EventHandler(this.pauseButton_Click);
+      // 
+      // resetButton
+      // 
+      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resetButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Restart;
+      this.resetButton.Location = new System.Drawing.Point(90, 458);
+      this.resetButton.Name = "resetButton";
+      this.resetButton.Size = new System.Drawing.Size(24, 24);
+      this.resetButton.TabIndex = 11;
+      this.toolTip.SetToolTip(this.resetButton, "Reset Algorithm");
+      this.resetButton.UseVisualStyleBackColor = true;
+      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeLabel.AutoSize = true;
+      this.executionTimeLabel.Location = new System.Drawing.Point(453, 465);
+      this.executionTimeLabel.Name = "executionTimeLabel";
+      this.executionTimeLabel.Size = new System.Drawing.Size(83, 13);
+      this.executionTimeLabel.TabIndex = 12;
+      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(542, 462);
+      this.executionTimeTextBox.Name = "executionTimeTextBox";
+      this.executionTimeTextBox.ReadOnly = true;
+      this.executionTimeTextBox.Size = new System.Drawing.Size(137, 20);
+      this.executionTimeTextBox.TabIndex = 13;
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "Problem";
+      this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
+      this.openFileDialog.Title = "Open Problem";
+      // 
+      // stopButton
+      // 
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stopButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Stop;
+      this.stopButton.Location = new System.Drawing.Point(60, 458);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(24, 24);
+      this.stopButton.TabIndex = 10;
+      this.toolTip.SetToolTip(this.stopButton, "Stop Algorithm");
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+      // 
+      // 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, 0);
+      this.algorithmComboBox.Name = "algorithmComboBox";
+      this.algorithmComboBox.Size = new System.Drawing.Size(547, 21);
+      this.algorithmComboBox.TabIndex = 1;
+      this.algorithmComboBox.SelectedValueChanged += new System.EventHandler(this.algorithmComboBox_SelectedValueChanged);
+      // 
+      // algorithmLabel
+      // 
+      this.algorithmLabel.AutoSize = true;
+      this.algorithmLabel.Location = new System.Drawing.Point(3, 5);
+      this.algorithmLabel.Name = "algorithmLabel";
+      this.algorithmLabel.Size = new System.Drawing.Size(53, 13);
+      this.algorithmLabel.TabIndex = 0;
+      this.algorithmLabel.Text = "&Algorithm:";
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.refreshButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshButton.Location = new System.Drawing.Point(655, -1);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.refreshButton, "Refresh Algorithms");
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // cloneAlgorithmButton
+      // 
+      this.cloneAlgorithmButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.cloneAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Clone;
+      this.cloneAlgorithmButton.Location = new System.Drawing.Point(625, -1);
+      this.cloneAlgorithmButton.Name = "cloneAlgorithmButton";
+      this.cloneAlgorithmButton.Size = new System.Drawing.Size(24, 24);
+      this.cloneAlgorithmButton.TabIndex = 2;
+      this.toolTip.SetToolTip(this.cloneAlgorithmButton, "Clone Algorithm");
+      this.cloneAlgorithmButton.UseVisualStyleBackColor = true;
+      this.cloneAlgorithmButton.Click += new System.EventHandler(this.cloneAlgorithmButton_Click);
+      // 
+      // storeRunsAutomaticallyCheckBox
+      // 
+      this.storeRunsAutomaticallyCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.storeRunsAutomaticallyCheckBox.AutoSize = true;
+      this.storeRunsAutomaticallyCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.storeRunsAutomaticallyCheckBox.Checked = true;
+      this.storeRunsAutomaticallyCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.storeRunsAutomaticallyCheckBox.Location = new System.Drawing.Point(318, 6);
+      this.storeRunsAutomaticallyCheckBox.Name = "storeRunsAutomaticallyCheckBox";
+      this.storeRunsAutomaticallyCheckBox.Size = new System.Drawing.Size(147, 17);
+      this.storeRunsAutomaticallyCheckBox.TabIndex = 1;
+      this.storeRunsAutomaticallyCheckBox.Text = "Store Runs &Automatically:";
+      this.toolTip.SetToolTip(this.storeRunsAutomaticallyCheckBox, "Store finished runs automatically in the OKB.");
+      this.storeRunsAutomaticallyCheckBox.UseVisualStyleBackColor = true;
+      this.storeRunsAutomaticallyCheckBox.CheckedChanged += new System.EventHandler(this.storeRunsAutomaticallyCheckBox_CheckedChanged);
+      // 
+      // OKBAlgorithmView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.algorithmComboBox);
+      this.Controls.Add(this.algorithmLabel);
+      this.Controls.Add(this.cloneAlgorithmButton);
+      this.Controls.Add(this.refreshButton);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.startButton);
+      this.Controls.Add(this.pauseButton);
+      this.Controls.Add(this.executionTimeTextBox);
+      this.Controls.Add(this.executionTimeLabel);
+      this.Controls.Add(this.stopButton);
+      this.Controls.Add(this.resetButton);
+      this.Name = "OKBAlgorithmView";
+      this.Size = new System.Drawing.Size(679, 482);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.resetButton, 0);
+      this.Controls.SetChildIndex(this.stopButton, 0);
+      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
+      this.Controls.SetChildIndex(this.pauseButton, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.startButton, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.Controls.SetChildIndex(this.refreshButton, 0);
+      this.Controls.SetChildIndex(this.cloneAlgorithmButton, 0);
+      this.Controls.SetChildIndex(this.algorithmLabel, 0);
+      this.Controls.SetChildIndex(this.algorithmComboBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.problemTabPage.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.resultsTabPage.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.runsTabPage.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private HeuristicLab.MainForm.WindowsForms.DragOverTabControl tabControl;
+    private System.Windows.Forms.TabPage parametersTabPage;
+    private System.Windows.Forms.TabPage problemTabPage;
+    private HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
+    private HeuristicLab.MainForm.WindowsForms.ViewHost problemViewHost;
+    private System.Windows.Forms.Button newProblemButton;
+    private System.Windows.Forms.Button openProblemButton;
+    private System.Windows.Forms.Button startButton;
+    private System.Windows.Forms.Button pauseButton;
+    private System.Windows.Forms.Button resetButton;
+    private System.Windows.Forms.Label executionTimeLabel;
+    private System.Windows.Forms.TextBox executionTimeTextBox;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.TabPage resultsTabPage;
+    private HeuristicLab.Optimization.Views.ResultCollectionView resultsView;
+    private System.Windows.Forms.Button stopButton;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private RunCollectionView runsView;
+    private System.Windows.Forms.CheckBox storeAlgorithmInEachRunCheckBox;
+    private System.Windows.Forms.ComboBox algorithmComboBox;
+    private System.Windows.Forms.Label algorithmLabel;
+    private System.Windows.Forms.Button refreshButton;
+    private System.Windows.Forms.Button cloneAlgorithmButton;
+    private System.Windows.Forms.CheckBox storeRunsAutomaticallyCheckBox;
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.cs	(revision 8055)
@@ -0,0 +1,376 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [View("OKBAlgorithm View")]
+  [Content(typeof(OKBAlgorithm), true)]
+  public sealed partial class OKBAlgorithmView : NamedItemView {
+    private TypeSelectorDialog problemTypeSelectorDialog;
+
+    public new OKBAlgorithm Content {
+      get { return (OKBAlgorithm)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OKBAlgorithmView() {
+      InitializeComponent();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (problemTypeSelectorDialog != null) problemTypeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    protected override void OnInitialized(EventArgs e) {
+      // Set order of tab pages according to z order.
+      // NOTE: This is required due to a bug in the VS designer.
+      List<Control> tabPages = new List<Control>();
+      for (int i = 0; i < tabControl.Controls.Count; i++) {
+        tabPages.Add(tabControl.Controls[i]);
+      }
+      tabControl.Controls.Clear();
+      foreach (Control control in tabPages)
+        tabControl.Controls.Add(control);
+
+      base.OnInitialized(e);
+      //TODO: deregistration of eventhandlers is missing?
+      RunCreationClient.Instance.Refreshing += new EventHandler(RunCreationClient_Refreshing);
+      RunCreationClient.Instance.Refreshed += new EventHandler(RunCreationClient_Refreshed);
+      PopulateComboBox();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.AlgorithmChanged -= new EventHandler(Content_AlgorithmChanged);
+      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);
+      Content.ProblemChanged -= new EventHandler(Content_ProblemChanged);
+      Content.StoreRunsAutomaticallyChanged -= new EventHandler(Content_StoreRunsAutomaticallyChanged);
+      Content.StoreAlgorithmInEachRunChanged -= new EventHandler(Content_StoreAlgorithmInEachRunChanged);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.AlgorithmChanged += new EventHandler(Content_AlgorithmChanged);
+      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);
+      Content.ProblemChanged += new EventHandler(Content_ProblemChanged);
+      Content.StoreRunsAutomaticallyChanged += new EventHandler(Content_StoreRunsAutomaticallyChanged);
+      Content.StoreAlgorithmInEachRunChanged += new EventHandler(Content_StoreAlgorithmInEachRunChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        algorithmComboBox.SelectedIndex = -1;
+        parameterCollectionView.Content = null;
+        problemViewHost.Content = null;
+        resultsView.Content = null;
+        runsView.Content = null;
+        storeRunsAutomaticallyCheckBox.Checked = true;
+        storeAlgorithmInEachRunCheckBox.Checked = true;
+        executionTimeTextBox.Text = "-";
+      } else {
+        algorithmComboBox.SelectedItem = RunCreationClient.Instance.Algorithms.FirstOrDefault(x => x.Id == Content.AlgorithmId);
+        Locked = ReadOnly = Content.ExecutionState == ExecutionState.Started;
+        parameterCollectionView.Content = Content.Parameters;
+        problemViewHost.ViewType = null;
+        problemViewHost.Content = Content.Problem;
+        resultsView.Content = Content.Results.AsReadOnly();
+        runsView.Content = Content.Runs;
+        storeRunsAutomaticallyCheckBox.Checked = Content.StoreRunsAutomatically;
+        storeAlgorithmInEachRunCheckBox.Checked = Content.StoreAlgorithmInEachRun;
+        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      algorithmComboBox.Enabled = (Content != null) && !ReadOnly && !Locked && (algorithmComboBox.Items.Count > 0);
+      cloneAlgorithmButton.Enabled = (Content != null) && (Content.AlgorithmId != -1) && !ReadOnly && !Locked;
+      refreshButton.Enabled = (Content != null) && !ReadOnly && !Locked;
+      parameterCollectionView.Enabled = Content != null;
+      newProblemButton.Enabled = Content != null && !ReadOnly;
+      openProblemButton.Enabled = Content != null && !ReadOnly;
+      problemViewHost.Enabled = Content != null;
+      resultsView.Enabled = Content != null;
+      runsView.Enabled = Content != null;
+      storeRunsAutomaticallyCheckBox.Enabled = Content != null && !ReadOnly;
+      storeAlgorithmInEachRunCheckBox.Enabled = Content != null && !ReadOnly;
+      executionTimeTextBox.Enabled = Content != null;
+      SetEnabledStateOfExecutableButtons();
+    }
+
+    protected override void OnClosed(FormClosedEventArgs e) {
+      RunCreationClient.Instance.Refreshing -= new EventHandler(RunCreationClient_Refreshing);
+      RunCreationClient.Instance.Refreshed -= new EventHandler(RunCreationClient_Refreshed);
+      if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) {
+        //The content must be stopped if no other view showing the content is available
+        var optimizers = MainFormManager.MainForm.Views.OfType<IContentView>().Where(v => v != this).Select(v => v.Content).OfType<IOptimizer>();
+        if (!optimizers.Contains(Content)) {
+          var nestedOptimizers = optimizers.SelectMany(opt => opt.NestedOptimizers);
+          if (!nestedOptimizers.Contains(Content)) Content.Stop();
+        }
+      }
+      base.OnClosed(e);
+    }
+
+    private void RunCreationClient_Refreshing(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(RunCreationClient_Refreshing), sender, e);
+      } else {
+        Cursor = Cursors.AppStarting;
+        Enabled = false;
+      }
+    }
+    private void RunCreationClient_Refreshed(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(RunCreationClient_Refreshed), sender, e);
+      } else {
+        PopulateComboBox();
+        Enabled = true;
+        SetEnabledStateOfControls();
+        Cursor = Cursors.Default;
+      }
+    }
+
+    #region Content Events
+    private void Content_AlgorithmChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_AlgorithmChanged), sender, e);
+      else
+        OnContentChanged();
+    }
+    private void Content_ProblemChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ProblemChanged), sender, e);
+      else {
+        problemViewHost.ViewType = null;
+        problemViewHost.Content = Content.Problem;
+      }
+    }
+    private void Content_ExecutionStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
+      else
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.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_StoreRunsAutomaticallyChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_StoreRunsAutomaticallyChanged), sender, e);
+      else
+        storeRunsAutomaticallyCheckBox.Checked = Content.StoreRunsAutomatically;
+    }
+    private void Content_StoreAlgorithmInEachRunChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_StoreAlgorithmInEachRunChanged), sender, e);
+      else
+        storeAlgorithmInEachRunCheckBox.Checked = Content.StoreAlgorithmInEachRun;
+    }
+    private void Content_Prepared(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Prepared), sender, e);
+      else {
+        resultsView.Content = Content.Results.AsReadOnly();
+        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();
+      }
+    }
+    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);
+    }
+    #endregion
+
+    #region Control Events
+    private void cloneAlgorithmButton_Click(object sender, EventArgs e) {
+      MainFormManager.MainForm.ShowContent(Content.CloneAlgorithm());
+    }
+    private void refreshButton_Click(object sender, System.EventArgs e) {
+      RunCreationClient.Instance.Refresh();
+    }
+    private void algorithmComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      Algorithm algorithm = algorithmComboBox.SelectedValue as Algorithm;
+      if ((algorithm != null) && (Content != null)) {
+        Content.Load(algorithm.Id);
+        if (Content.AlgorithmId != algorithm.Id)  // reset selected item if load was not successful
+          algorithmComboBox.SelectedItem = RunCreationClient.Instance.Algorithms.FirstOrDefault(x => x.Id == Content.AlgorithmId);
+      }
+    }
+    private void newProblemButton_Click(object sender, EventArgs e) {
+      if (problemTypeSelectorDialog == null) {
+        problemTypeSelectorDialog = new TypeSelectorDialog();
+        problemTypeSelectorDialog.Caption = "Select Problem";
+        problemTypeSelectorDialog.TypeSelector.Caption = "Available Problems";
+        problemTypeSelectorDialog.TypeSelector.Configure(Content.ProblemType, false, true);
+      }
+      if (problemTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          Content.Problem = (IProblem)problemTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+    }
+    private void openProblemButton_Click(object sender, EventArgs e) {
+      openFileDialog.Title = "Open Problem";
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        newProblemButton.Enabled = openProblemButton.Enabled = false;
+        problemViewHost.Enabled = false;
+
+        ContentManager.LoadAsync(openFileDialog.FileName, delegate(IStorableContent content, Exception error) {
+          try {
+            if (error != null) throw error;
+            IProblem problem = content as IProblem;
+            if (problem == null)
+              Invoke(new Action(() =>
+                MessageBox.Show(this, "The selected file does not contain a problem.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error)));
+            else if (!Content.ProblemType.IsInstanceOfType(problem))
+              Invoke(new Action(() =>
+                MessageBox.Show(this, "The selected file contains a problem type which is not supported by this algorithm.", "Invalid Problem Type", MessageBoxButtons.OK, MessageBoxIcon.Error)));
+            else
+              Content.Problem = problem;
+          }
+          catch (Exception ex) {
+            Invoke(new Action(() => ErrorHandling.ShowErrorDialog(this, ex)));
+          }
+          finally {
+            Invoke(new Action(delegate() {
+              problemViewHost.Enabled = true;
+              newProblemButton.Enabled = openProblemButton.Enabled = true;
+            }));
+          }
+        });
+      }
+    }
+    private void storeRunsAutomaticallyCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (Content != null) Content.StoreRunsAutomatically = storeRunsAutomaticallyCheckBox.Checked;
+    }
+    private void storeAlgorithmInEachRunCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (Content != null) Content.StoreAlgorithmInEachRun = storeAlgorithmInEachRunCheckBox.Checked;
+    }
+    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();
+    }
+    private void resetButton_Click(object sender, EventArgs e) {
+      Content.Prepare(false);
+    }
+    private void problemTabPage_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      Type type = e.Data.GetData("Type") as Type;
+      if ((type != null) && (Content.ProblemType.IsAssignableFrom(type))) {
+        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
+        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
+        else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;
+        else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;
+        else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;
+      }
+    }
+    private void problemTabPage_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        IProblem problem = e.Data.GetData("Value") as IProblem;
+        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) problem = (IProblem)problem.Clone();
+        Content.Problem = problem;
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void PopulateComboBox() {
+      algorithmComboBox.DataSource = null;
+      algorithmComboBox.DataSource = RunCreationClient.Instance.Algorithms.ToList();
+      algorithmComboBox.DisplayMember = "Name";
+    }
+    private void SetEnabledStateOfExecutableButtons() {
+      if (Content == null) {
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
+      } else {
+        startButton.Enabled = (Content.ExecutionState == ExecutionState.Prepared) || (Content.ExecutionState == ExecutionState.Paused);
+        pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
+        stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
+        resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+      }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.Designer.cs	(revision 8055)
@@ -0,0 +1,183 @@
+﻿namespace HeuristicLab.Clients.OKB.RunCreation {
+  partial class OKBExperimentUploadView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.btnUpload = new System.Windows.Forms.Button();
+      this.dataGridView = new System.Windows.Forms.DataGridView();
+      this.RunNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.AlgorithmNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.AlgorithmTypeColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.OKBAlgorithmColumn = new System.Windows.Forms.DataGridViewComboBoxColumn();
+      this.ProblemNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.ProblemTypeColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.OKBProblemColumn = new System.Windows.Forms.DataGridViewComboBoxColumn();
+      this.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.setColumnToThisValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.clearButton = new System.Windows.Forms.Button();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.contextMenu.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // btnUpload
+      // 
+      this.btnUpload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.btnUpload.Location = new System.Drawing.Point(4, 200);
+      this.btnUpload.Name = "btnUpload";
+      this.btnUpload.Size = new System.Drawing.Size(89, 23);
+      this.btnUpload.TabIndex = 1;
+      this.btnUpload.Text = "Upload Runs";
+      this.btnUpload.UseVisualStyleBackColor = true;
+      this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click);
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.AllowDrop = true;
+      this.dataGridView.AllowUserToAddRows = false;
+      this.dataGridView.AllowUserToDeleteRows = false;
+      this.dataGridView.AllowUserToOrderColumns = true;
+      this.dataGridView.AllowUserToResizeRows = false;
+      this.dataGridView.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.dataGridView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
+      this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.RunNameColumn,
+            this.AlgorithmNameColumn,
+            this.AlgorithmTypeColumn,
+            this.OKBAlgorithmColumn,
+            this.ProblemNameColumn,
+            this.ProblemTypeColumn,
+            this.OKBProblemColumn});
+      this.dataGridView.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter;
+      this.dataGridView.Location = new System.Drawing.Point(3, 3);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.Size = new System.Drawing.Size(460, 191);
+      this.dataGridView.TabIndex = 2;
+      this.dataGridView.CellMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridView_CellMouseClick);
+      this.dataGridView.DragDrop += new System.Windows.Forms.DragEventHandler(this.dataGridView_DragDrop);
+      this.dataGridView.DragEnter += new System.Windows.Forms.DragEventHandler(this.dataGridView_DragEnter);
+      // 
+      // RunNameColumn
+      // 
+      this.RunNameColumn.HeaderText = "Run Name";
+      this.RunNameColumn.Name = "RunNameColumn";
+      this.RunNameColumn.ReadOnly = true;
+      // 
+      // AlgorithmNameColumn
+      // 
+      this.AlgorithmNameColumn.HeaderText = "Algorithm Name";
+      this.AlgorithmNameColumn.Name = "AlgorithmNameColumn";
+      this.AlgorithmNameColumn.ReadOnly = true;
+      // 
+      // AlgorithmTypeColumn
+      // 
+      this.AlgorithmTypeColumn.HeaderText = "Algorithm Type";
+      this.AlgorithmTypeColumn.Name = "AlgorithmTypeColumn";
+      this.AlgorithmTypeColumn.ReadOnly = true;
+      // 
+      // OKBAlgorithmColumn
+      // 
+      this.OKBAlgorithmColumn.HeaderText = "OKB Algorithm";
+      this.OKBAlgorithmColumn.Name = "OKBAlgorithmColumn";
+      // 
+      // ProblemNameColumn
+      // 
+      this.ProblemNameColumn.HeaderText = "Problem Name";
+      this.ProblemNameColumn.Name = "ProblemNameColumn";
+      this.ProblemNameColumn.ReadOnly = true;
+      this.ProblemNameColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True;
+      this.ProblemNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+      // 
+      // ProblemTypeColumn
+      // 
+      this.ProblemTypeColumn.HeaderText = "Problem Type";
+      this.ProblemTypeColumn.Name = "ProblemTypeColumn";
+      this.ProblemTypeColumn.ReadOnly = true;
+      this.ProblemTypeColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True;
+      this.ProblemTypeColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+      // 
+      // OKBProblemColumn
+      // 
+      this.OKBProblemColumn.HeaderText = "OKB Problem";
+      this.OKBProblemColumn.Name = "OKBProblemColumn";
+      // 
+      // contextMenu
+      // 
+      this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.setColumnToThisValueToolStripMenuItem});
+      this.contextMenu.Name = "contextMenu";
+      this.contextMenu.Size = new System.Drawing.Size(202, 26);
+      // 
+      // setColumnToThisValueToolStripMenuItem
+      // 
+      this.setColumnToThisValueToolStripMenuItem.Name = "setColumnToThisValueToolStripMenuItem";
+      this.setColumnToThisValueToolStripMenuItem.Size = new System.Drawing.Size(201, 22);
+      this.setColumnToThisValueToolStripMenuItem.Text = "Set column to this value";
+      this.setColumnToThisValueToolStripMenuItem.Click += new System.EventHandler(this.setColumnToThisValueToolStripMenuItem_Click);
+      // 
+      // clearButton
+      // 
+      this.clearButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.clearButton.Location = new System.Drawing.Point(387, 199);
+      this.clearButton.Name = "clearButton";
+      this.clearButton.Size = new System.Drawing.Size(75, 23);
+      this.clearButton.TabIndex = 3;
+      this.clearButton.Text = "Clear Runs";
+      this.clearButton.UseVisualStyleBackColor = true;
+      this.clearButton.Click += new System.EventHandler(this.clearButton_Click);
+      // 
+      // OKBExperimentUploadView
+      // 
+      this.AllowDrop = true;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.clearButton);
+      this.Controls.Add(this.dataGridView);
+      this.Controls.Add(this.btnUpload);
+      this.Name = "OKBExperimentUploadView";
+      this.Size = new System.Drawing.Size(466, 229);
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.contextMenu.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button btnUpload;
+    private System.Windows.Forms.DataGridView dataGridView;
+    private System.Windows.Forms.DataGridViewTextBoxColumn RunNameColumn;
+    private System.Windows.Forms.DataGridViewTextBoxColumn AlgorithmNameColumn;
+    private System.Windows.Forms.DataGridViewTextBoxColumn AlgorithmTypeColumn;
+    private System.Windows.Forms.DataGridViewComboBoxColumn OKBAlgorithmColumn;
+    private System.Windows.Forms.DataGridViewTextBoxColumn ProblemNameColumn;
+    private System.Windows.Forms.DataGridViewTextBoxColumn ProblemTypeColumn;
+    private System.Windows.Forms.DataGridViewComboBoxColumn OKBProblemColumn;
+    private System.Windows.Forms.ContextMenuStrip contextMenu;
+    private System.Windows.Forms.ToolStripMenuItem setColumnToThisValueToolStripMenuItem;
+    private System.Windows.Forms.Button clearButton;
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs	(revision 8055)
@@ -0,0 +1,303 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Drawing;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Access;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [View("OKBExperimentUpload View")]
+  [Content(typeof(RunCollection), false)]
+  [Content(typeof(IOptimizer), false)]
+  public partial class OKBExperimentUploadView : ItemView {
+    public new IOptimizer Content {
+      get { return (IOptimizer)base.Content; }
+      set {
+        base.Content = value;
+      }
+    }
+
+    private const string algorithmTypeParameterName = "Algorithm Type";
+    private const string problemTypeParameterName = "Problem Type";
+    private const string algorithmNameParameterName = "Algorithm Name";
+    private const string problemNameParameterName = "Problem Name";
+    private const int algorithmColumnIndex = 3;
+    private const int problemColumnIndex = 6;
+
+    private List<IRun> runs = new List<IRun>();
+    private List<Problem> problems = new List<Problem>();
+    private List<Algorithm> algorithms = new List<Algorithm>();
+    Algorithm selectedAlgorithm = null;
+    Problem selectedProblem = null;
+    private ProgressView progressView;
+
+    public OKBExperimentUploadView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        ClearRuns();
+      } else {
+        AddRuns(Content);
+      }
+    }
+
+    private void AddRuns(IItem item) {
+      if (item is Experiment) {
+        runs.AddRange((item as Experiment).Runs);
+        DisplayRuns((item as Experiment).Runs);
+      } else if (item is RunCollection) {
+        runs.AddRange((item as RunCollection));
+        DisplayRuns((item as RunCollection));
+      } else if (item is IOptimizer) {
+        runs.AddRange((item as IOptimizer).Runs);
+        DisplayRuns((item as IOptimizer).Runs);
+      } else if (item is IRun) {
+        runs.Add(item as IRun);
+        RunCollection tmp = new RunCollection();
+        tmp.Add(item as IRun);
+        DisplayRuns(tmp);
+      }
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      RunCreationClient.Instance.Refreshing += new EventHandler(RunCreationClient_Refreshing);
+      RunCreationClient.Instance.Refreshed += new EventHandler(RunCreationClient_Refreshed);
+    }
+
+    protected override void DeregisterContentEvents() {
+      RunCreationClient.Instance.Refreshing -= new EventHandler(RunCreationClient_Refreshing);
+      RunCreationClient.Instance.Refreshed -= new EventHandler(RunCreationClient_Refreshed);
+      base.DeregisterContentEvents();
+    }
+
+    private void DisplayError(Exception ex) {
+      PluginInfrastructure.ErrorHandling.ShowErrorDialog("An error occured while retrieving algorithm and problem information from the OKB.", ex);
+    }
+
+    private void DisplayRuns(RunCollection runs) {
+      if (RunCreationClient.Instance.Algorithms == null || RunCreationClient.Instance.Algorithms.Count() == 0) {
+        RunCreationClient.Instance.RefreshAsync(DisplayError);
+      } else {
+        CreateUI(runs);
+      }
+    }
+
+    private void CreateUI(RunCollection runs) {
+      if (problems.Count == 0)
+        problems.AddRange(RunCreationClient.Instance.Problems);
+      if (algorithms.Count == 0)
+        algorithms.AddRange(RunCreationClient.Instance.Algorithms);
+
+      IItem algorithmType;
+      IItem problemType;
+      IItem algorithmName;
+      IItem problemName;
+
+      DataGridViewComboBoxColumn cmbAlgorithm = dataGridView.Columns[algorithmColumnIndex] as DataGridViewComboBoxColumn;
+      cmbAlgorithm.DataSource = algorithms;
+      cmbAlgorithm.DisplayMember = "Name";
+
+      DataGridViewComboBoxColumn cmbProblem = dataGridView.Columns[problemColumnIndex] as DataGridViewComboBoxColumn;
+      cmbProblem.DataSource = problems;
+      cmbProblem.DisplayMember = "Name";
+
+      foreach (IRun run in runs) {
+        int idx = dataGridView.Rows.Add(run.Name);
+        DataGridViewRow curRow = dataGridView.Rows[idx];
+        curRow.Tag = run;
+
+        if (run.Parameters.TryGetValue(algorithmTypeParameterName, out algorithmType)) {
+          HeuristicLab.Data.StringValue algStr = algorithmType as HeuristicLab.Data.StringValue;
+          if (algStr != null) {
+            curRow.Cells[1].Value = algStr;
+          }
+        }
+
+        if (run.Parameters.TryGetValue(algorithmNameParameterName, out algorithmName)) {
+          HeuristicLab.Data.StringValue algStr = algorithmName as HeuristicLab.Data.StringValue;
+          if (algStr != null) {
+            curRow.Cells[2].Value = algStr;
+          }
+        }
+
+        if (run.Parameters.TryGetValue(problemTypeParameterName, out problemType)) {
+          HeuristicLab.Data.StringValue prbStr = problemType as HeuristicLab.Data.StringValue;
+          if (prbStr != null) {
+            curRow.Cells[4].Value = prbStr;
+          }
+        }
+
+        if (run.Parameters.TryGetValue(problemNameParameterName, out problemName)) {
+          HeuristicLab.Data.StringValue prbStr = problemName as HeuristicLab.Data.StringValue;
+          if (prbStr != null) {
+            curRow.Cells[5].Value = prbStr;
+          }
+        }
+      }
+    }
+
+    private void ClearRuns() {
+      dataGridView.Rows.Clear();
+      runs.Clear();
+    }
+
+    private void RunCreationClient_Refreshing(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(RunCreationClient_Refreshing), sender, e);
+      } else {
+        IProgress prog = new Progress();
+        prog.Status = "Refreshing algorithms and problems...";
+        SetProgressView(prog);
+      }
+    }
+
+    private void RunCreationClient_Refreshed(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(RunCreationClient_Refreshed), sender, e);
+      } else {
+        FinishProgressView();
+        SetEnabledStateOfControls();
+      }
+    }
+
+    private void btnUpload_Click(object sender, EventArgs e) {
+      var task = System.Threading.Tasks.Task.Factory.StartNew(UploadAsync);
+      task.ContinueWith((t) => {
+        FinishProgressView();
+        PluginInfrastructure.ErrorHandling.ShowErrorDialog("An exception occured while uploading the runs to the OKB.", t.Exception);
+      }, TaskContinuationOptions.OnlyOnFaulted);
+    }
+
+    private void UploadAsync() {
+      IProgress prog = new Progress();
+      prog.Status = "Uploading runs to OKB...";
+      prog.ProgressValue = 0;
+      double count = dataGridView.Rows.Count;
+      int i = 0;
+
+      SetProgressView(prog);
+      foreach (DataGridViewRow row in dataGridView.Rows) {
+        selectedAlgorithm = algorithms.Where(x => x.Name == row.Cells[algorithmColumnIndex].Value.ToString()).FirstOrDefault();
+        selectedProblem = problems.Where(x => x.Name == row.Cells[problemColumnIndex].Value.ToString()).FirstOrDefault();
+        if (selectedAlgorithm == null || selectedProblem == null) {
+          throw new ArgumentException("Can't retrieve the algorithm/problem to upload");
+        }
+
+        OKBRun run = new OKBRun(selectedAlgorithm.Id, selectedProblem.Id, row.Tag as IRun, UserInformation.Instance.User.Id);
+        run.Store();
+        i++;
+        prog.ProgressValue = ((double)i) / count;
+      }
+      FinishProgressView();
+    }
+
+    private void SetProgressView(IProgress progress) {
+      if (InvokeRequired) {
+        Invoke(new Action<IProgress>(SetProgressView), progress);
+      } else {
+        if (progressView == null) {
+          progressView = new ProgressView(this, progress);
+        } else {
+          progressView.Progress = progress;
+        }
+      }
+    }
+
+    private void FinishProgressView() {
+      if (InvokeRequired) {
+        Invoke(new Action(FinishProgressView));
+      } else {
+        if (progressView != null) {
+          progressView.Finish();
+          progressView = null;
+          SetEnabledStateOfControls();
+          ClearRuns();
+        }
+      }
+    }
+
+    private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
+      if (e.Button == System.Windows.Forms.MouseButtons.Right && dataGridView[e.ColumnIndex, e.RowIndex].Value != null) {
+        string curVal = dataGridView[e.ColumnIndex, e.RowIndex].Value.ToString();
+        selectedAlgorithm = algorithms.Where(x => x.Name == curVal).FirstOrDefault();
+        selectedProblem = problems.Where(x => x.Name == curVal).FirstOrDefault();
+
+        if (selectedAlgorithm != null || selectedProblem != null) {
+          Point pos = this.PointToClient(Cursor.Position);
+          contextMenu.Show(this, pos);
+        }
+      }
+    }
+
+    private void setColumnToThisValueToolStripMenuItem_Click(object sender, EventArgs e) {
+      if (selectedAlgorithm != null) {
+        for (int i = 0; i < dataGridView.Rows.Count; i++) {
+          var row = dataGridView.Rows[i];
+          row.Cells[algorithmColumnIndex].Value = selectedAlgorithm.Name;
+        }
+      } else if (selectedProblem != null) {
+        for (int i = 0; i < dataGridView.Rows.Count; i++) {
+          var row = dataGridView.Rows[i];
+          row.Cells[problemColumnIndex].Value = selectedProblem.Name;
+        }
+      }
+      selectedAlgorithm = null;
+      selectedProblem = null;
+    }
+
+    private void dataGridView_DragEnter(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IRun
+        || e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IOptimizer) {
+        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
+        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
+      }
+    }
+
+    private void dataGridView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        IItem optimizer = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IItem;
+        if (e.Effect.HasFlag(DragDropEffects.Copy)) optimizer = (IItem)optimizer.Clone();
+        AddRuns(optimizer);
+      }
+    }
+
+    private void clearButton_Click(object sender, EventArgs e) {
+      ClearRuns();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs	(revision 8055)
@@ -0,0 +1,167 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  partial class OKBProblemView {
+    /// <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.problemComboBox = new System.Windows.Forms.ComboBox();
+      this.problemLabel = new System.Windows.Forms.Label();
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.cloneProblemButton = new System.Windows.Forms.Button();
+      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(72, 27);
+      this.nameTextBox.Size = new System.Drawing.Size(604, 20);
+      this.nameTextBox.TabIndex = 5;
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.Location = new System.Drawing.Point(3, 30);
+      this.nameLabel.TabIndex = 4;
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(687, 30);
+      this.infoLabel.TabIndex = 6;
+      // 
+      // 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, 0);
+      this.problemComboBox.Name = "problemComboBox";
+      this.problemComboBox.Size = new System.Drawing.Size(574, 21);
+      this.problemComboBox.TabIndex = 1;
+      this.problemComboBox.SelectedValueChanged += new System.EventHandler(this.problemComboBox_SelectedValueChanged);
+      // 
+      // problemLabel
+      // 
+      this.problemLabel.AutoSize = true;
+      this.problemLabel.Location = new System.Drawing.Point(3, 3);
+      this.problemLabel.Name = "problemLabel";
+      this.problemLabel.Size = new System.Drawing.Size(48, 13);
+      this.problemLabel.TabIndex = 0;
+      this.problemLabel.Text = "&Problem:";
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.refreshButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshButton.Location = new System.Drawing.Point(682, -1);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.refreshButton, "Refresh Problems");
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // cloneProblemButton
+      // 
+      this.cloneProblemButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.cloneProblemButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Clone;
+      this.cloneProblemButton.Location = new System.Drawing.Point(652, -1);
+      this.cloneProblemButton.Name = "cloneProblemButton";
+      this.cloneProblemButton.Size = new System.Drawing.Size(24, 24);
+      this.cloneProblemButton.TabIndex = 2;
+      this.toolTip.SetToolTip(this.cloneProblemButton, "Clone Problem");
+      this.cloneProblemButton.UseVisualStyleBackColor = true;
+      this.cloneProblemButton.Click += new System.EventHandler(this.cloneProblemButton_Click);
+      // 
+      // parameterCollectionView
+      // 
+      this.parameterCollectionView.AllowEditingOfHiddenParameters = false;
+      this.parameterCollectionView.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.parameterCollectionView.Caption = "ParameterCollection View";
+      this.parameterCollectionView.Content = null;
+      this.parameterCollectionView.Location = new System.Drawing.Point(0, 53);
+      this.parameterCollectionView.Name = "parameterCollectionView";
+      this.parameterCollectionView.ReadOnly = false;
+      this.parameterCollectionView.Size = new System.Drawing.Size(706, 340);
+      this.parameterCollectionView.TabIndex = 7;
+      // 
+      // OKBProblemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.problemComboBox);
+      this.Controls.Add(this.parameterCollectionView);
+      this.Controls.Add(this.problemLabel);
+      this.Controls.Add(this.cloneProblemButton);
+      this.Controls.Add(this.refreshButton);
+      this.Name = "OKBProblemView";
+      this.Size = new System.Drawing.Size(706, 393);
+      this.Controls.SetChildIndex(this.refreshButton, 0);
+      this.Controls.SetChildIndex(this.cloneProblemButton, 0);
+      this.Controls.SetChildIndex(this.problemLabel, 0);
+      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.problemComboBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox problemComboBox;
+    private System.Windows.Forms.Label problemLabel;
+    private System.Windows.Forms.Button refreshButton;
+    private System.Windows.Forms.Button cloneProblemButton;
+    private HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs	(revision 8055)
@@ -0,0 +1,135 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [View("OKBProblem View")]
+  [Content(typeof(SingleObjectiveOKBProblem), true)]
+  [Content(typeof(MultiObjectiveOKBProblem), true)]
+  public sealed partial class OKBProblemView : NamedItemView {
+    public new OKBProblem Content {
+      get { return (OKBProblem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OKBProblemView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      RunCreationClient.Instance.Refreshing += new EventHandler(RunCreationClient_Refreshing);
+      RunCreationClient.Instance.Refreshed += new EventHandler(RunCreationClient_Refreshed);
+      PopulateComboBox();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ProblemChanged -= new EventHandler(Content_ProblemChanged);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ProblemChanged += new EventHandler(Content_ProblemChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        problemComboBox.SelectedIndex = -1;
+        parameterCollectionView.Content = null;
+      } else {
+        problemComboBox.SelectedItem = RunCreationClient.Instance.Problems.FirstOrDefault(x => x.Id == Content.ProblemId);
+        parameterCollectionView.Content = Content.Parameters;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      problemComboBox.Enabled = (Content != null) && !ReadOnly && !Locked && (problemComboBox.Items.Count > 0);
+      cloneProblemButton.Enabled = (Content != null) && (Content.ProblemId != -1) && !ReadOnly && !Locked;
+      refreshButton.Enabled = (Content != null) && !ReadOnly && !Locked;
+      parameterCollectionView.Enabled = Content != null;
+    }
+
+    protected override void OnClosed(FormClosedEventArgs e) {
+      RunCreationClient.Instance.Refreshing -= new EventHandler(RunCreationClient_Refreshing);
+      RunCreationClient.Instance.Refreshed -= new EventHandler(RunCreationClient_Refreshed);
+      base.OnClosed(e);
+    }
+
+    private void RunCreationClient_Refreshing(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(RunCreationClient_Refreshing), sender, e);
+      } else {
+        Cursor = Cursors.AppStarting;
+        problemComboBox.Enabled = cloneProblemButton.Enabled = refreshButton.Enabled = parameterCollectionView.Enabled = false;
+      }
+    }
+    private void RunCreationClient_Refreshed(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(RunCreationClient_Refreshed), sender, e);
+      } else {
+        PopulateComboBox();
+        SetEnabledStateOfControls();
+        Cursor = Cursors.Default;
+      }
+    }
+
+    #region Content Events
+    private void Content_ProblemChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ProblemChanged), sender, e);
+      else
+        OnContentChanged();
+    }
+    #endregion
+
+    #region Control Events
+    private void cloneProblemButton_Click(object sender, EventArgs e) {
+      MainFormManager.MainForm.ShowContent(Content.CloneProblem());
+    }
+    private void refreshButton_Click(object sender, System.EventArgs e) {
+      RunCreationClient.Instance.Refresh();
+    }
+    private void problemComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      Problem problem = problemComboBox.SelectedValue as Problem;
+      if ((problem != null) && (Content != null)) {
+        Content.Load(problem.Id);
+        if (Content.ProblemId != problem.Id)  // reset selected item if load was not successful
+          problemComboBox.SelectedItem = RunCreationClient.Instance.Problems.FirstOrDefault(x => x.Id == Content.ProblemId);
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void PopulateComboBox() {
+      problemComboBox.DataSource = null;
+      problemComboBox.DataSource = RunCreationClient.Instance.Problems.ToList();
+      problemComboBox.DisplayMember = "Name";
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.Designer.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.Designer.cs	(revision 8055)
@@ -0,0 +1,93 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB.RunCreation.Views {
+  partial class OKBRunView {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.storeButton = new System.Windows.Forms.Button();
+      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      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.storeButton.UseVisualStyleBackColor = true;
+      this.storeButton.Click += new System.EventHandler(this.storeButton_Click);
+      // 
+      // 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 = false;
+      this.viewHost.Location = new System.Drawing.Point(0, 30);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.ReadOnly = false;
+      this.viewHost.Size = new System.Drawing.Size(631, 411);
+      this.viewHost.TabIndex = 1;
+      this.viewHost.ViewsLabelVisible = true;
+      this.viewHost.ViewType = null;
+      // 
+      // OKBRunView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.viewHost);
+      this.Controls.Add(this.storeButton);
+      this.Name = "OKBRunView";
+      this.Size = new System.Drawing.Size(631, 441);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button storeButton;
+    private MainForm.WindowsForms.ViewHost viewHost;
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.cs	(revision 8055)
@@ -0,0 +1,81 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation.Views {
+  [View("OKBRun View")]
+  [Content(typeof(OKBRun), true)]
+  public sealed partial class OKBRunView : ItemView {
+    public new OKBRun Content {
+      get { return (OKBRun)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OKBRunView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.StoredChanged -= new System.EventHandler(Content_StoredChanged);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.StoredChanged += new System.EventHandler(Content_StoredChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      viewHost.Content = Content == null ? null : Content.WrappedRun;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      storeButton.Enabled = (Content != null) && !ReadOnly && !Locked && !Content.Stored;
+    }
+
+    #region Content Events
+    private void Content_StoredChanged(object sender, System.EventArgs e) {
+      storeButton.Enabled = !Content.Stored;
+    }
+    #endregion
+
+    #region Control Events
+    private void storeButton_Click(object sender, System.EventArgs e) {
+      try {
+        Content.Store();
+      }
+      catch (MissingClientRegistrationException) {
+        MessageBox.Show("You have to register your client to be able to store OKB runs." + Environment.NewLine
+          + " Please click in the menu bar on Services -> Access -> Client Information and register your client. ", "Missing client registration", MessageBoxButtons.OK, MessageBoxIcon.Information);
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog(this, "Store failed.", ex);
+      }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/AdministrationClient.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/AdministrationClient.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/AdministrationClient.cs	(revision 8055)
@@ -0,0 +1,221 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 HeuristicLab.Clients.Common;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  [Item("AdministrationClient", "OKB administration client.")]
+  public sealed class AdministrationClient : IContent {
+    private static AdministrationClient instance;
+    public static AdministrationClient Instance {
+      get {
+        if (instance == null) instance = new AdministrationClient();
+        return instance;
+      }
+    }
+
+    #region Properties
+    private ItemCollection<Platform> platforms;
+    public ItemCollection<Platform> Platforms {
+      get { return platforms; }
+    }
+    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
+
+    public AdministrationClient() { }
+
+    #region Refresh
+    public void Refresh() {
+      OnRefreshing();
+
+      platforms = new OKBItemCollection<Platform>();
+      algorithmClasses = new OKBItemCollection<AlgorithmClass>();
+      algorithms = new OKBItemCollection<Algorithm>();
+      problemClasses = new OKBItemCollection<ProblemClass>();
+      problems = new OKBItemCollection<Problem>();
+
+      try {
+        platforms.AddRange(CallAdministrationService<List<Platform>>(s => s.GetPlatforms()).OrderBy(x => x.Name));
+        algorithmClasses.AddRange(CallAdministrationService<List<AlgorithmClass>>(s => s.GetAlgorithmClasses()).OrderBy(x => x.Name));
+        algorithms.AddRange(CallAdministrationService<List<Algorithm>>(s => s.GetAlgorithms()).OrderBy(x => x.Name));
+        problemClasses.AddRange(CallAdministrationService<List<ProblemClass>>(s => s.GetProblemClasses()).OrderBy(x => x.Name));
+        problems.AddRange(CallAdministrationService<List<Problem>>(s => s.GetProblems()).OrderBy(x => x.Name));
+      }
+      finally {
+        OnRefreshed();
+      }
+    }
+    public void RefreshAsync(Action<Exception> exceptionCallback) {
+      var call = new Func<Exception>(delegate() {
+        try {
+          Refresh();
+        }
+        catch (Exception ex) {
+          return ex;
+        }
+        return null;
+      });
+      call.BeginInvoke(delegate(IAsyncResult result) {
+        Exception ex = call.EndInvoke(result);
+        if (ex != null) exceptionCallback(ex);
+      }, null);
+    }
+    #endregion
+
+    #region Store
+    public static void Store(IOKBItem item) {
+      if (item.Id == 0) {
+        if (item is Platform)
+          item.Id = CallAdministrationService<long>(s => s.AddPlatform((Platform)item));
+        else if (item is AlgorithmClass)
+          item.Id = CallAdministrationService<long>(s => s.AddAlgorithmClass((AlgorithmClass)item));
+        else if (item is Algorithm)
+          item.Id = CallAdministrationService<long>(s => s.AddAlgorithm((Algorithm)item));
+        else if (item is ProblemClass)
+          item.Id = CallAdministrationService<long>(s => s.AddProblemClass((ProblemClass)item));
+        else if (item is Problem)
+          item.Id = CallAdministrationService<long>(s => s.AddProblem((Problem)item));
+      } else {
+        if (item is Platform)
+          CallAdministrationService(s => s.UpdatePlatform((Platform)item));
+        else if (item is AlgorithmClass)
+          CallAdministrationService(s => s.UpdateAlgorithmClass((AlgorithmClass)item));
+        else if (item is Algorithm)
+          CallAdministrationService(s => s.UpdateAlgorithm((Algorithm)item));
+        else if (item is ProblemClass)
+          CallAdministrationService(s => s.UpdateProblemClass((ProblemClass)item));
+        else if (item is Problem)
+          CallAdministrationService(s => s.UpdateProblem((Problem)item));
+      }
+    }
+    #endregion
+
+    #region Delete
+    public static void Delete(IOKBItem item) {
+      if (item is Platform)
+        CallAdministrationService(s => s.DeletePlatform(item.Id));
+      else if (item is AlgorithmClass)
+        CallAdministrationService(s => s.DeleteAlgorithmClass(item.Id));
+      else if (item is Algorithm)
+        CallAdministrationService(s => s.DeleteAlgorithm(item.Id));
+      else if (item is ProblemClass)
+        CallAdministrationService(s => s.DeleteProblemClass(item.Id));
+      else if (item is Problem)
+        CallAdministrationService(s => s.DeleteProblem(item.Id));
+      item.Id = 0;
+    }
+    #endregion
+
+    #region Algorithm Methods
+    public static List<Guid> GetAlgorithmUsers(long algorithmId) {
+      return CallAdministrationService<List<Guid>>(s => s.GetAlgorithmUsers(algorithmId));
+    }
+    public static void UpdateAlgorithmUsers(long algorithmId, List<Guid> users) {
+      CallAdministrationService(s => s.UpdateAlgorithmUsers(algorithmId, users));
+    }
+    public static byte[] GetAlgorithmData(long algorithmId) {
+      return CallAdministrationService<byte[]>(s => s.GetAlgorithmData(algorithmId));
+    }
+    public static void UpdateAlgorithmData(long algorithmId, byte[] algorithmData) {
+      CallAdministrationService(s => s.UpdateAlgorithmData(algorithmId, algorithmData));
+    }
+    #endregion
+
+    #region Problem Methods
+    public static List<Guid> GetProblemUsers(long problemId) {
+      return CallAdministrationService<List<Guid>>(s => s.GetProblemUsers(problemId));
+    }
+    public static void UpdateProblemUsers(long problemId, List<Guid> users) {
+      CallAdministrationService(s => s.UpdateProblemUsers(problemId, users));
+    }
+    public static byte[] GetProblemData(long problemId) {
+      return CallAdministrationService<byte[]>(s => s.GetProblemData(problemId));
+    }
+    public static void UpdateProblemData(long problemId, byte[] problemData) {
+      CallAdministrationService(s => s.UpdateProblemData(problemId, problemData));
+    }
+    #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() {
+      var handler = Refreshed;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region Helpers
+    private static void CallAdministrationService(Action<IAdministrationService> call) {
+      AdministrationServiceClient client = ClientFactory.CreateClient<AdministrationServiceClient, IAdministrationService>();
+      try {
+        call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
+    private static T CallAdministrationService<T>(Func<IAdministrationService, T> call) {
+      AdministrationServiceClient client = ClientFactory.CreateClient<AdministrationServiceClient, IAdministrationService>();
+      try {
+        return call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/AdministrationServiceClient.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/AdministrationServiceClient.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/AdministrationServiceClient.cs	(revision 8055)
@@ -0,0 +1,480 @@
+﻿//------------------------------------------------------------------------------
+// <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.Administration {
+
+
+  [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.Administration." +
+      "DataTransfer")]
+  public partial class Platform : HeuristicLab.Clients.OKB.Administration.NamedOKBItem {
+  }
+
+  [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.Administration." +
+      "DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.NamedOKBItem))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.AlgorithmClass))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.Algorithm))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.ProblemClass))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.Problem))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.Platform))]
+  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 = "NamedOKBItem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Administration." +
+      "DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.AlgorithmClass))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.Algorithm))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.ProblemClass))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.Problem))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Administration.Platform))]
+  public partial class NamedOKBItem : HeuristicLab.Clients.OKB.Administration.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 = "AlgorithmClass", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Administration." +
+      "DataTransfer")]
+  public partial class AlgorithmClass : HeuristicLab.Clients.OKB.Administration.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.Administration." +
+      "DataTransfer")]
+  public partial class Algorithm : HeuristicLab.Clients.OKB.Administration.NamedOKBItem {
+
+    private long AlgorithmClassIdField;
+
+    private string DataTypeNameField;
+
+    private string DataTypeTypeNameField;
+
+    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 string DataTypeName {
+      get {
+        return this.DataTypeNameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DataTypeNameField, value) != true)) {
+          this.DataTypeNameField = value;
+          this.RaisePropertyChanged("DataTypeName");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string DataTypeTypeName {
+      get {
+        return this.DataTypeTypeNameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DataTypeTypeNameField, value) != true)) {
+          this.DataTypeTypeNameField = value;
+          this.RaisePropertyChanged("DataTypeTypeName");
+        }
+      }
+    }
+
+    [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 = "ProblemClass", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Administration." +
+      "DataTransfer")]
+  public partial class ProblemClass : HeuristicLab.Clients.OKB.Administration.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.Administration." +
+      "DataTransfer")]
+  public partial class Problem : HeuristicLab.Clients.OKB.Administration.NamedOKBItem {
+
+    private string DataTypeNameField;
+
+    private string DataTypeTypeNameField;
+
+    private long PlatformIdField;
+
+    private long ProblemClassIdField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string DataTypeName {
+      get {
+        return this.DataTypeNameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DataTypeNameField, value) != true)) {
+          this.DataTypeNameField = value;
+          this.RaisePropertyChanged("DataTypeName");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string DataTypeTypeName {
+      get {
+        return this.DataTypeTypeNameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DataTypeTypeNameField, value) != true)) {
+          this.DataTypeTypeNameField = value;
+          this.RaisePropertyChanged("DataTypeTypeName");
+        }
+      }
+    }
+
+    [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.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  [System.ServiceModel.ServiceContractAttribute(ConfigurationName = "HeuristicLab.Clients.OKB.Administration.IAdministrationService")]
+  public interface IAdministrationService {
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/UpdateProblemUsers", ReplyAction = "http://tempuri.org/IAdministrationService/UpdateProblemUsersResponse")]
+    void UpdateProblemUsers(long problemId, System.Collections.Generic.List<System.Guid> users);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/GetProblemData", ReplyAction = "http://tempuri.org/IAdministrationService/GetProblemDataResponse")]
+    byte[] GetProblemData(long problemId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/UpdateProblemData", ReplyAction = "http://tempuri.org/IAdministrationService/UpdateProblemDataResponse")]
+    void UpdateProblemData(long problemId, byte[] data);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/GetPlatforms", ReplyAction = "http://tempuri.org/IAdministrationService/GetPlatformsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Administration.Platform> GetPlatforms();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/AddPlatform", ReplyAction = "http://tempuri.org/IAdministrationService/AddPlatformResponse")]
+    long AddPlatform(HeuristicLab.Clients.OKB.Administration.Platform dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/UpdatePlatform", ReplyAction = "http://tempuri.org/IAdministrationService/UpdatePlatformResponse")]
+    void UpdatePlatform(HeuristicLab.Clients.OKB.Administration.Platform dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/DeletePlatform", ReplyAction = "http://tempuri.org/IAdministrationService/DeletePlatformResponse")]
+    void DeletePlatform(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/GetAlgorithmClasses", ReplyAction = "http://tempuri.org/IAdministrationService/GetAlgorithmClassesResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Administration.AlgorithmClass> GetAlgorithmClasses();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/AddAlgorithmClass", ReplyAction = "http://tempuri.org/IAdministrationService/AddAlgorithmClassResponse")]
+    long AddAlgorithmClass(HeuristicLab.Clients.OKB.Administration.AlgorithmClass dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/UpdateAlgorithmClass", ReplyAction = "http://tempuri.org/IAdministrationService/UpdateAlgorithmClassResponse")]
+    void UpdateAlgorithmClass(HeuristicLab.Clients.OKB.Administration.AlgorithmClass dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/DeleteAlgorithmClass", ReplyAction = "http://tempuri.org/IAdministrationService/DeleteAlgorithmClassResponse")]
+    void DeleteAlgorithmClass(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/GetAlgorithms", ReplyAction = "http://tempuri.org/IAdministrationService/GetAlgorithmsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Administration.Algorithm> GetAlgorithms();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/AddAlgorithm", ReplyAction = "http://tempuri.org/IAdministrationService/AddAlgorithmResponse")]
+    long AddAlgorithm(HeuristicLab.Clients.OKB.Administration.Algorithm dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/UpdateAlgorithm", ReplyAction = "http://tempuri.org/IAdministrationService/UpdateAlgorithmResponse")]
+    void UpdateAlgorithm(HeuristicLab.Clients.OKB.Administration.Algorithm dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/DeleteAlgorithm", ReplyAction = "http://tempuri.org/IAdministrationService/DeleteAlgorithmResponse")]
+    void DeleteAlgorithm(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/GetAlgorithmUsers", ReplyAction = "http://tempuri.org/IAdministrationService/GetAlgorithmUsersResponse")]
+    System.Collections.Generic.List<System.Guid> GetAlgorithmUsers(long algorithmId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/UpdateAlgorithmUsers", ReplyAction = "http://tempuri.org/IAdministrationService/UpdateAlgorithmUsersResponse")]
+    void UpdateAlgorithmUsers(long algorithmId, System.Collections.Generic.List<System.Guid> users);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/GetAlgorithmData", ReplyAction = "http://tempuri.org/IAdministrationService/GetAlgorithmDataResponse")]
+    byte[] GetAlgorithmData(long algorithmId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/UpdateAlgorithmData", ReplyAction = "http://tempuri.org/IAdministrationService/UpdateAlgorithmDataResponse")]
+    void UpdateAlgorithmData(long algorithmId, byte[] data);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/GetProblemClasses", ReplyAction = "http://tempuri.org/IAdministrationService/GetProblemClassesResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Administration.ProblemClass> GetProblemClasses();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/AddProblemClass", ReplyAction = "http://tempuri.org/IAdministrationService/AddProblemClassResponse")]
+    long AddProblemClass(HeuristicLab.Clients.OKB.Administration.ProblemClass dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/UpdateProblemClass", ReplyAction = "http://tempuri.org/IAdministrationService/UpdateProblemClassResponse")]
+    void UpdateProblemClass(HeuristicLab.Clients.OKB.Administration.ProblemClass dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/DeleteProblemClass", ReplyAction = "http://tempuri.org/IAdministrationService/DeleteProblemClassResponse")]
+    void DeleteProblemClass(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/GetProblems", ReplyAction = "http://tempuri.org/IAdministrationService/GetProblemsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Administration.Problem> GetProblems();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/AddProblem", ReplyAction = "http://tempuri.org/IAdministrationService/AddProblemResponse")]
+    long AddProblem(HeuristicLab.Clients.OKB.Administration.Problem dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/UpdateProblem", ReplyAction = "http://tempuri.org/IAdministrationService/UpdateProblemResponse")]
+    void UpdateProblem(HeuristicLab.Clients.OKB.Administration.Problem dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/DeleteProblem", ReplyAction = "http://tempuri.org/IAdministrationService/DeleteProblemResponse")]
+    void DeleteProblem(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdministrationService/GetProblemUsers", ReplyAction = "http://tempuri.org/IAdministrationService/GetProblemUsersResponse")]
+    System.Collections.Generic.List<System.Guid> GetProblemUsers(long problemId);
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  public interface IAdministrationServiceChannel : HeuristicLab.Clients.OKB.Administration.IAdministrationService, System.ServiceModel.IClientChannel {
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  public partial class AdministrationServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.OKB.Administration.IAdministrationService>, HeuristicLab.Clients.OKB.Administration.IAdministrationService {
+
+    public AdministrationServiceClient() {
+    }
+
+    public AdministrationServiceClient(string endpointConfigurationName) :
+      base(endpointConfigurationName) {
+    }
+
+    public AdministrationServiceClient(string endpointConfigurationName, string remoteAddress) :
+      base(endpointConfigurationName, remoteAddress) {
+    }
+
+    public AdministrationServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
+      base(endpointConfigurationName, remoteAddress) {
+    }
+
+    public AdministrationServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
+      base(binding, remoteAddress) {
+    }
+
+    public void UpdateProblemUsers(long problemId, System.Collections.Generic.List<System.Guid> users) {
+      base.Channel.UpdateProblemUsers(problemId, users);
+    }
+
+    public byte[] GetProblemData(long problemId) {
+      return base.Channel.GetProblemData(problemId);
+    }
+
+    public void UpdateProblemData(long problemId, byte[] data) {
+      base.Channel.UpdateProblemData(problemId, data);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Administration.Platform> GetPlatforms() {
+      return base.Channel.GetPlatforms();
+    }
+
+    public long AddPlatform(HeuristicLab.Clients.OKB.Administration.Platform dto) {
+      return base.Channel.AddPlatform(dto);
+    }
+
+    public void UpdatePlatform(HeuristicLab.Clients.OKB.Administration.Platform dto) {
+      base.Channel.UpdatePlatform(dto);
+    }
+
+    public void DeletePlatform(long id) {
+      base.Channel.DeletePlatform(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Administration.AlgorithmClass> GetAlgorithmClasses() {
+      return base.Channel.GetAlgorithmClasses();
+    }
+
+    public long AddAlgorithmClass(HeuristicLab.Clients.OKB.Administration.AlgorithmClass dto) {
+      return base.Channel.AddAlgorithmClass(dto);
+    }
+
+    public void UpdateAlgorithmClass(HeuristicLab.Clients.OKB.Administration.AlgorithmClass dto) {
+      base.Channel.UpdateAlgorithmClass(dto);
+    }
+
+    public void DeleteAlgorithmClass(long id) {
+      base.Channel.DeleteAlgorithmClass(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Administration.Algorithm> GetAlgorithms() {
+      return base.Channel.GetAlgorithms();
+    }
+
+    public long AddAlgorithm(HeuristicLab.Clients.OKB.Administration.Algorithm dto) {
+      return base.Channel.AddAlgorithm(dto);
+    }
+
+    public void UpdateAlgorithm(HeuristicLab.Clients.OKB.Administration.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 byte[] GetAlgorithmData(long algorithmId) {
+      return base.Channel.GetAlgorithmData(algorithmId);
+    }
+
+    public void UpdateAlgorithmData(long algorithmId, byte[] data) {
+      base.Channel.UpdateAlgorithmData(algorithmId, data);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Administration.ProblemClass> GetProblemClasses() {
+      return base.Channel.GetProblemClasses();
+    }
+
+    public long AddProblemClass(HeuristicLab.Clients.OKB.Administration.ProblemClass dto) {
+      return base.Channel.AddProblemClass(dto);
+    }
+
+    public void UpdateProblemClass(HeuristicLab.Clients.OKB.Administration.ProblemClass dto) {
+      base.Channel.UpdateProblemClass(dto);
+    }
+
+    public void DeleteProblemClass(long id) {
+      base.Channel.DeleteProblemClass(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Administration.Problem> GetProblems() {
+      return base.Channel.GetProblems();
+    }
+
+    public long AddProblem(HeuristicLab.Clients.OKB.Administration.Problem dto) {
+      return base.Channel.AddProblem(dto);
+    }
+
+    public void UpdateProblem(HeuristicLab.Clients.OKB.Administration.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);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/Algorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/Algorithm.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/Algorithm.cs	(revision 8055)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You 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.Administration {
+  [Item("Algorithm", "An OKB algorithm.")]
+  public partial class Algorithm {
+    protected Algorithm(Algorithm original, Cloner cloner)
+      : base(original, cloner) {
+      PlatformId = original.PlatformId;
+      AlgorithmClassId = original.AlgorithmClassId;
+      DataTypeName = original.DataTypeName;
+      DataTypeTypeName = original.DataTypeTypeName;
+    }
+    public Algorithm() {
+      Name = "New Algorithm";
+      PlatformId = 1;
+      AlgorithmClassId = 1;
+      DataTypeName = "Unknown";
+      DataTypeTypeName = "Unknown";
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Algorithm(this, cloner);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/AlgorithmClass.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/AlgorithmClass.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/AlgorithmClass.cs	(revision 8055)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You 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.Administration {
+  [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: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/GenerateServiceClient.cmd
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/GenerateServiceClient.cmd	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/GenerateServiceClient.cmd	(revision 8055)
@@ -0,0 +1,33 @@
+echo off
+
+echo.
+echo *******************************************************************************************
+echo Generating OKB administration service client
+echo.
+
+REM If app.config should be generated, use option "/config:..\..\app.config" and optionally "/mergeConfig" instead of "/noConfig".
+
+svcutil.exe ^
+  http://localhost:8732/Design_Time_Addresses/OKB-3.3/AdministrationService/mex ^
+  /out:AdministrationServiceClient ^
+  /namespace:*,HeuristicLab.Clients.OKB.Administration ^
+  /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 OKB administration service client finished.
+echo *******************************************************************************************
+echo.
+
+pause
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/INamedOKBItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/INamedOKBItem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/INamedOKBItem.cs	(revision 8055)
@@ -0,0 +1,27 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Administration {
+  public interface INamedOKBItem : IOKBItem {
+    string Name { get; set; }
+    string Description { get; set; }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/IOKBItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/IOKBItem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/IOKBItem.cs	(revision 8055)
@@ -0,0 +1,35 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Administration {
+  public interface IOKBItem : IItem, INotifyPropertyChanged {
+    long Id { get; set; }
+    bool Modified { get; }
+
+    void Store();
+
+    event EventHandler ModifiedChanged;
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/NamedOKBItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/NamedOKBItem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/NamedOKBItem.cs	(revision 8055)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Administration {
+  [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 OKB 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: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/OKBItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/OKBItem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/OKBItem.cs	(revision 8055)
@@ -0,0 +1,122 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Administration {
+  [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 static Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Database; }
+    }
+    public virtual Image ItemImage {
+      get {
+        if (Modified)
+          return HeuristicLab.Common.Resources.VSImageLibrary.DatabaseModified;
+        else
+          return ItemAttribute.GetImage(this.GetType());
+      }
+    }
+
+    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() {
+      AdministrationClient.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: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/OKBItemCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/OKBItemCollection.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/OKBItemCollection.cs	(revision 8055)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB.Administration {
+  [Item("OKBItem Collection", "Represents a collection of OKB items.")]
+  public class OKBItemCollection<T> : ItemCollection<T> where T : class, IOKBItem {
+    protected OKBItemCollection(OKBItemCollection<T> original, Cloner cloner) : base(original, cloner) { }
+    public OKBItemCollection() : base() { }
+    public OKBItemCollection(IEnumerable<T> collection) : base(collection) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new OKBItemCollection<T>(this, cloner); }
+
+    protected override void OnItemsRemoved(IEnumerable<T> items) {
+      IEnumerable<T> successful, unsuccessful;
+      Exception ex;
+      RemoveItems(items, out successful, out unsuccessful, out ex);
+      list.AddRange(unsuccessful);
+      base.OnItemsRemoved(successful);
+      if (ex != null) throw ex;
+    }
+    protected override void OnCollectionReset(IEnumerable<T> items, IEnumerable<T> oldItems) {
+      IEnumerable<T> successful, unsuccessful;
+      Exception ex;
+      RemoveItems(oldItems, out successful, out unsuccessful, out ex);
+      list.AddRange(unsuccessful);
+      base.OnCollectionReset(items.Concat(unsuccessful), oldItems);
+      if (ex != null) throw ex;
+    }
+
+    private void RemoveItems(IEnumerable<T> items, out IEnumerable<T> successful, out IEnumerable<T> unsuccessful, out Exception exception) {
+      List<T> removed = new List<T>();
+      List<T> notremoved = new List<T>();
+      exception = null;
+      foreach (T item in items) {
+        try {
+          AdministrationClient.Delete(item);
+          removed.Add(item);
+        }
+        catch (Exception ex) {
+          exception = ex;
+          notremoved.Add(item);
+        }
+      }
+      successful = removed;
+      unsuccessful = notremoved;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/Platform.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/Platform.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/Platform.cs	(revision 8055)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You 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.Administration {
+  [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: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/Problem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/Problem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/Problem.cs	(revision 8055)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You 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.Administration {
+  [Item("Problem", "An OKB problem.")]
+  public partial class Problem {
+    protected Problem(Problem original, Cloner cloner)
+      : base(original, cloner) {
+      PlatformId = original.PlatformId;
+      ProblemClassId = original.ProblemClassId;
+      DataTypeName = original.DataTypeName;
+      DataTypeTypeName = original.DataTypeTypeName;
+    }
+    public Problem() {
+      Name = "New Problem";
+      PlatformId = 1;
+      ProblemClassId = 1;
+      DataTypeName = "Unknown";
+      DataTypeTypeName = "Unknown";
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Problem(this, cloner);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/ProblemClass.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/ProblemClass.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Administration/ServiceClient/ProblemClass.cs	(revision 8055)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You 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.Administration {
+  [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: /trunk/sources/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 8055)
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>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>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <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="Administration\AdministrationClient.cs" />
+    <Compile Include="Administration\ServiceClient\AdministrationServiceClient.cs" />
+    <Compile Include="Administration\ServiceClient\Algorithm.cs" />
+    <Compile Include="Administration\ServiceClient\AlgorithmClass.cs" />
+    <Compile Include="Administration\ServiceClient\OKBItemCollection.cs" />
+    <Compile Include="Administration\ServiceClient\INamedOKBItem.cs" />
+    <Compile Include="Administration\ServiceClient\IOKBItem.cs" />
+    <Compile Include="Administration\ServiceClient\NamedOKBItem.cs" />
+    <Compile Include="Administration\ServiceClient\OKBItem.cs" />
+    <Compile Include="Administration\ServiceClient\Platform.cs" />
+    <Compile Include="Administration\ServiceClient\Problem.cs" />
+    <Compile Include="Administration\ServiceClient\ProblemClass.cs" />
+    <Compile Include="OKBRoles.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Query\QueryClient.cs" />
+    <Compile Include="Query\ServiceClient\CombinedFilter.cs" />
+    <Compile Include="Query\ServiceClient\ValueName.cs" />
+    <Compile Include="Query\ServiceClient\OrdinalComparisonTimeSpanFilter.cs" />
+    <Compile Include="Query\ServiceClient\NameOrdinalComparisonTimeSpanFilter.cs" />
+    <Compile Include="Query\ServiceClient\OrdinalComparisonPercentFilter.cs" />
+    <Compile Include="Query\ServiceClient\NameOrdinalComparisonPercentFilter.cs" />
+    <Compile Include="Query\ServiceClient\OrdinalComparisonFloatFilter.cs" />
+    <Compile Include="Query\ServiceClient\OrdinalComparisonDoubleFilter.cs" />
+    <Compile Include="Query\ServiceClient\EqualityComparisonByteArrayFilter.cs" />
+    <Compile Include="Query\ServiceClient\EqualityComparisonBoolFilter.cs" />
+    <Compile Include="Query\ServiceClient\OrdinalComparisonIntFilter.cs" />
+    <Compile Include="Query\ServiceClient\NameOrdinalComparisonIntFilter.cs" />
+    <Compile Include="Query\ServiceClient\NameOrdinalComparisonFloatFilter.cs" />
+    <Compile Include="Query\ServiceClient\Filter.cs" />
+    <Compile Include="Query\ServiceClient\NameEqualityComparisonBoolFilter.cs" />
+    <Compile Include="Query\ServiceClient\NameEqualityComparisonByteArrayFilter.cs" />
+    <Compile Include="Query\ServiceClient\NameOrdinalComparisonDoubleFilter.cs" />
+    <Compile Include="Query\ServiceClient\NameOrdinalComparisonLongFilter.cs" />
+    <Compile Include="Query\ServiceClient\NameStringComparisonAvailableValuesFilter.cs" />
+    <Compile Include="Query\ServiceClient\NameStringComparisonFilter.cs" />
+    <Compile Include="Query\ServiceClient\OrdinalComparisonDateTimeFilter.cs" />
+    <Compile Include="Query\ServiceClient\OrdinalComparisonLongFilter.cs" />
+    <Compile Include="Query\ServiceClient\QueryServiceClient.cs" />
+    <Compile Include="Query\ServiceClient\StringComparisonAvailableValuesFilter.cs" />
+    <Compile Include="Query\ServiceClient\StringComparisonFilter.cs" />
+    <Compile Include="RunCreation\EmptyAlgorithm.cs" />
+    <Compile Include="RunCreation\EmptyEvaluator.cs" />
+    <Compile Include="RunCreation\EmptyMultiObjectiveEvaluator.cs" />
+    <Compile Include="RunCreation\EmptyMultiObjectiveProblem.cs" />
+    <Compile Include="RunCreation\EmptyProblem.cs" />
+    <Compile Include="RunCreation\EmptySingleObjectiveEvaluator.cs" />
+    <Compile Include="RunCreation\EmptySingleObjectiveProblem.cs" />
+    <Compile Include="RunCreation\EmptySolutionCreator.cs" />
+    <Compile Include="RunCreation\ItemWrapper.cs" />
+    <Compile Include="RunCreation\MissingClientRegistrationException.cs" />
+    <Compile Include="RunCreation\MultiObjectiveOKBProblem.cs" />
+    <Compile Include="RunCreation\NamedItemWrapper.cs" />
+    <Compile Include="RunCreation\OKBAlgorithm.cs" />
+    <Compile Include="RunCreation\OKBProblem.cs" />
+    <Compile Include="RunCreation\OKBRun.cs" />
+    <Compile Include="RunCreation\RunCreationClient.cs" />
+    <Compile Include="RunCreation\ServiceClient\Algorithm.cs" />
+    <Compile Include="RunCreation\ServiceClient\Problem.cs" />
+    <Compile Include="RunCreation\ServiceClient\RunCreationServiceClient.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RunCreation\SingleObjectiveOKBProblem.cs" />
+    <None Include="app.config" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <None Include="Administration\ServiceClient\GenerateServiceClient.cmd" />
+    <None Include="Query\ServiceClient\GenerateServiceClient.cmd" />
+    <None Include="RunCreation\ServiceClient\GenerateServiceClient.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Access\3.3\HeuristicLab.Clients.Access-3.3.csproj">
+      <Project>{494F87F4-0F25-4D33-A382-10CDB2174D48}</Project>
+      <Name>HeuristicLab.Clients.Access-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Common\3.3\HeuristicLab.Clients.Common-3.3.csproj">
+      <Project>{730A9104-D4D1-4360-966B-E49B7571DDA3}</Project>
+      <Name>HeuristicLab.Clients.Common-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
+      <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
+      <Name>HeuristicLab.Operators-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <EmbedInteropTypes>False</EmbedInteropTypes>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/OKBRoles.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/OKBRoles.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/OKBRoles.cs	(revision 8055)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 HeuristicLab.Clients.Access;
+
+namespace HeuristicLab.Clients.OKB {
+  public static class OKBRoles {
+    public const string OKBUser = "OKB User";
+    public const string OKBAdministrator = "OKB Administrator";
+
+    public static bool CheckUserPermissions() {
+      if (UserInformation.Instance.UserExists) {
+        if (UserInformation.Instance.User.Roles.Count(x => x.Name == OKBRoles.OKBUser || x.Name == OKBRoles.OKBAdministrator) > 0) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    public static bool CheckAdminUserPermissions() {
+      if (UserInformation.Instance.UserExists) {
+        if (UserInformation.Instance.User.Roles.Count(x => x.Name == OKBRoles.OKBAdministrator) > 0) {
+          return true;
+        }
+      }
+      return false;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Plugin.cs.frame	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Plugin.cs.frame	(revision 8055)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You 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.6.$WCREV$")]
+  [PluginFile("HeuristicLab.Clients.OKB-3.3.dll", PluginFileType.Assembly)]  
+  [PluginDependency("HeuristicLab.Clients.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Clients.Access", "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.Data", "3.3")]  
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]   
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabClientsOKBPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Properties/AssemblyInfo.cs.frame	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Properties/AssemblyInfo.cs.frame	(revision 8055)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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-2012 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.6.$WCREV$")]
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/QueryClient.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/QueryClient.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/QueryClient.cs	(revision 8055)
@@ -0,0 +1,130 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 HeuristicLab.Clients.Common;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB.Query {
+  [Item("QueryClient", "OKB query client.")]
+  public sealed class QueryClient : IContent {
+    private static QueryClient instance;
+    public static QueryClient Instance {
+      get {
+        if (instance == null) instance = new QueryClient();
+        return instance;
+      }
+    }
+
+    #region Properties
+    private List<Filter> filters;
+    public IEnumerable<Filter> Filters {
+      get { return filters; }
+    }
+    private List<ValueName> valueNames;
+    public IEnumerable<ValueName> ValueNames {
+      get { return valueNames; }
+    }
+    #endregion
+
+    private QueryClient() {
+      filters = new List<Filter>();
+      valueNames = new List<ValueName>();
+    }
+
+    #region Refresh
+    public void Refresh() {
+      OnRefreshing();
+      filters = new List<Filter>();
+      try {
+        filters.AddRange(CallQueryService<List<Filter>>(s => s.GetFilters()));
+        valueNames.AddRange(CallQueryService<List<ValueName>>(s => s.GetValueNames()));
+      }
+      finally {
+        OnRefreshed();
+      }
+    }
+    public void RefreshAsync(Action<Exception> exceptionCallback) {
+      var call = new Func<Exception>(delegate() {
+        try {
+          Refresh();
+        }
+        catch (Exception ex) {
+          return ex;
+        }
+        return null;
+      });
+      call.BeginInvoke(delegate(IAsyncResult result) {
+        Exception ex = call.EndInvoke(result);
+        if (ex != null) exceptionCallback(ex);
+      }, null);
+    }
+    #endregion
+
+    #region Query Methods
+    public long GetNumberOfRuns(Filter filter) {
+      return CallQueryService<long>(x => x.GetNumberOfRuns(filter));
+    }
+    public IEnumerable<long> GetRunIds(Filter filter) {
+      return CallQueryService<IEnumerable<long>>(x => x.GetRunIds(filter));
+    }
+    public IEnumerable<Run> GetRuns(IEnumerable<long> ids, bool includeBinaryValues) {
+      return CallQueryService<IEnumerable<Run>>(s => s.GetRuns(ids.ToList(), includeBinaryValues));
+    }
+    public IEnumerable<Run> GetRunsWithValues(IEnumerable<long> ids, bool includeBinaryValues, IEnumerable<ValueName> vn) {
+      return CallQueryService<IEnumerable<Run>>(s => s.GetRunsWithValues(ids.ToList(), includeBinaryValues, vn.ToList()));
+    }
+    #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);
+    }
+    #endregion
+
+    #region Helpers
+    private T CallQueryService<T>(Func<IQueryService, T> call) {
+      QueryServiceClient client = ClientFactory.CreateClient<QueryServiceClient, IQueryService>();
+      try {
+        return call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/CombinedFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/CombinedFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/CombinedFilter.cs	(revision 8055)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  public partial class CombinedFilter {
+    public override Filter Clone() {
+      return new CombinedFilter() { FilterTypeName = FilterTypeName, Label = Label, Operation = Operation, Filters = Filters.Select(x => x.Clone()).ToList() };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/EqualityComparisonBoolFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/EqualityComparisonBoolFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/EqualityComparisonBoolFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class EqualityComparisonBoolFilter {
+    public override Filter Clone() {
+      return new EqualityComparisonBoolFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/EqualityComparisonByteArrayFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/EqualityComparisonByteArrayFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/EqualityComparisonByteArrayFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class EqualityComparisonByteArrayFilter {
+    public override Filter Clone() {
+      return new EqualityComparisonByteArrayFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/Filter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/Filter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/Filter.cs	(revision 8055)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  public partial class Filter : IContent {
+    public virtual Filter Clone() {
+      throw new NotImplementedException("Clone not implemented in Filter. Override in derived classes.");
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/GenerateServiceClient.cmd
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/GenerateServiceClient.cmd	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/GenerateServiceClient.cmd	(revision 8055)
@@ -0,0 +1,24 @@
+echo off
+
+echo.
+echo *******************************************************************************************
+echo Generating OKB query service client
+echo.
+
+REM If app.config should be generated, use option "/config:..\..\app.config" and optionally "/mergeConfig" instead of "/noConfig".
+
+svcutil.exe ^
+  http://localhost:8732/Design_Time_Addresses/OKB-3.3/QueryService/mex ^
+  /out:QueryServiceClient ^
+  /namespace:*,HeuristicLab.Clients.OKB.Query ^
+  /collectionType:System.Collections.Generic.List`1 ^
+  /targetClientVersion:Version35 ^
+  /enableDataBinding ^
+  /noConfig
+
+echo.
+echo Generation of OKB query service client finished.
+echo *******************************************************************************************
+echo.
+
+pause
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameEqualityComparisonBoolFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameEqualityComparisonBoolFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameEqualityComparisonBoolFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class NameEqualityComparisonBoolFilter {
+    public override Filter Clone() {
+      return new NameEqualityComparisonBoolFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameEqualityComparisonByteArrayFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameEqualityComparisonByteArrayFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameEqualityComparisonByteArrayFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class NameEqualityComparisonByteArrayFilter {
+    public override Filter Clone() {
+      return new NameEqualityComparisonByteArrayFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonDoubleFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonDoubleFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonDoubleFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class NameOrdinalComparisonDoubleFilter {
+    public override Filter Clone() {
+      return new NameOrdinalComparisonDoubleFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonFloatFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonFloatFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonFloatFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class NameOrdinalComparisonFloatFilter {
+    public override Filter Clone() {
+      return new NameOrdinalComparisonFloatFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonIntFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonIntFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonIntFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class NameOrdinalComparisonIntFilter {
+    public override Filter Clone() {
+      return new NameOrdinalComparisonIntFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonLongFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonLongFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonLongFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class NameOrdinalComparisonLongFilter {
+    public override Filter Clone() {
+      return new NameOrdinalComparisonLongFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonPercentFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonPercentFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonPercentFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class NameOrdinalComparisonPercentFilter {
+    public override Filter Clone() {
+      return new NameOrdinalComparisonPercentFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonTimeSpanFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonTimeSpanFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameOrdinalComparisonTimeSpanFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class NameOrdinalComparisonTimeSpanFilter {
+    public override Filter Clone() {
+      return new NameOrdinalComparisonTimeSpanFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameStringComparisonAvailableValuesFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameStringComparisonAvailableValuesFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameStringComparisonAvailableValuesFilter.cs	(revision 8055)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  public partial class NameStringComparisonAvailableValuesFilter {
+    public override Filter Clone() {
+      return new NameStringComparisonAvailableValuesFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value, AvailableValues = new List<string>(AvailableValues) };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameStringComparisonFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameStringComparisonFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/NameStringComparisonFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class NameStringComparisonFilter {
+    public override Filter Clone() {
+      return new NameStringComparisonFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonDateTimeFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonDateTimeFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonDateTimeFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class OrdinalComparisonDateTimeFilter {
+    public override Filter Clone() {
+      return new OrdinalComparisonDateTimeFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonDoubleFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonDoubleFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonDoubleFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class OrdinalComparisonDoubleFilter {
+    public override Filter Clone() {
+      return new OrdinalComparisonDoubleFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonFloatFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonFloatFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonFloatFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class OrdinalComparisonFloatFilter {
+    public override Filter Clone() {
+      return new OrdinalComparisonFloatFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonIntFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonIntFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonIntFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class OrdinalComparisonIntFilter {
+    public override Filter Clone() {
+      return new OrdinalComparisonIntFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonLongFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonLongFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonLongFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class OrdinalComparisonLongFilter {
+    public override Filter Clone() {
+      return new OrdinalComparisonLongFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonPercentFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonPercentFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonPercentFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class OrdinalComparisonPercentFilter {
+    public override Filter Clone() {
+      return new OrdinalComparisonPercentFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonTimeSpanFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonTimeSpanFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/OrdinalComparisonTimeSpanFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class OrdinalComparisonTimeSpanFilter {
+    public override Filter Clone() {
+      return new OrdinalComparisonTimeSpanFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/QueryServiceClient.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/QueryServiceClient.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/QueryServiceClient.cs	(revision 8055)
@@ -0,0 +1,1927 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.261
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.OKB.Query
+{
+    using System.Runtime.Serialization;
+    
+    
+    [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.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonDoubleFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonDoubleFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonTimeSpanFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonTimeSpanFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonLongFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonLongFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonDateTimeFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonIntFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonIntFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonFloatFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonFloatFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonPercentFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonPercentFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.StringComparisonFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.StringComparisonAvailableValuesFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonAvailableValuesFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.CombinedFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.EqualityComparisonFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.EqualityComparisonBoolFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameEqualityComparisonBoolFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.EqualityComparisonByteArrayFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameEqualityComparisonByteArrayFilter))]
+    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="OrdinalComparisonFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonDoubleFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonDoubleFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonTimeSpanFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonTimeSpanFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonLongFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonLongFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonDateTimeFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonIntFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonIntFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonFloatFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonFloatFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonPercentFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonPercentFilter))]
+    public partial class OrdinalComparisonFilter : HeuristicLab.Clients.OKB.Query.Filter
+    {
+        
+        private HeuristicLab.Clients.OKB.Query.OrdinalComparison ComparisonField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.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="OrdinalComparisonDoubleFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonDoubleFilter))]
+    public partial class OrdinalComparisonDoubleFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonFilter
+    {
+        
+        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="NameOrdinalComparisonDoubleFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameOrdinalComparisonDoubleFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonDoubleFilter
+    {
+        
+        private string NameField;
+        
+        [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="OrdinalComparisonTimeSpanFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonTimeSpanFilter))]
+    public partial class OrdinalComparisonTimeSpanFilter : HeuristicLab.Clients.OKB.Query.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="NameOrdinalComparisonTimeSpanFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameOrdinalComparisonTimeSpanFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonTimeSpanFilter
+    {
+        
+        private string NameField;
+        
+        [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="OrdinalComparisonLongFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonLongFilter))]
+    public partial class OrdinalComparisonLongFilter : HeuristicLab.Clients.OKB.Query.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="NameOrdinalComparisonLongFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameOrdinalComparisonLongFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonLongFilter
+    {
+        
+        private string NameField;
+        
+        [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="OrdinalComparisonDateTimeFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class OrdinalComparisonDateTimeFilter : HeuristicLab.Clients.OKB.Query.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="OrdinalComparisonIntFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonIntFilter))]
+    public partial class OrdinalComparisonIntFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonFilter
+    {
+        
+        private int ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="NameOrdinalComparisonIntFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameOrdinalComparisonIntFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonIntFilter
+    {
+        
+        private string NameField;
+        
+        [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="OrdinalComparisonFloatFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonFloatFilter))]
+    public partial class OrdinalComparisonFloatFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonFilter
+    {
+        
+        private float ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public float Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="NameOrdinalComparisonFloatFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameOrdinalComparisonFloatFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonFloatFilter
+    {
+        
+        private string NameField;
+        
+        [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="OrdinalComparisonPercentFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonPercentFilter))]
+    public partial class OrdinalComparisonPercentFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonFilter
+    {
+        
+        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="NameOrdinalComparisonPercentFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameOrdinalComparisonPercentFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonPercentFilter
+    {
+        
+        private string NameField;
+        
+        [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="StringComparisonFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.StringComparisonAvailableValuesFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonAvailableValuesFilter))]
+    public partial class StringComparisonFilter : HeuristicLab.Clients.OKB.Query.Filter
+    {
+        
+        private HeuristicLab.Clients.OKB.Query.StringComparison ComparisonField;
+        
+        private string ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.StringComparison Comparison
+        {
+            get
+            {
+                return this.ComparisonField;
+            }
+            set
+            {
+                if ((this.ComparisonField.Equals(value) != true))
+                {
+                    this.ComparisonField = value;
+                    this.RaisePropertyChanged("Comparison");
+                }
+            }
+        }
+        
+        [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="NameStringComparisonFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameStringComparisonFilter : HeuristicLab.Clients.OKB.Query.StringComparisonFilter
+    {
+        
+        private string NameField;
+        
+        [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="StringComparisonAvailableValuesFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonAvailableValuesFilter))]
+    public partial class StringComparisonAvailableValuesFilter : HeuristicLab.Clients.OKB.Query.StringComparisonFilter
+    {
+        
+        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="NameStringComparisonAvailableValuesFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameStringComparisonAvailableValuesFilter : HeuristicLab.Clients.OKB.Query.StringComparisonAvailableValuesFilter
+    {
+        
+        private string NameField;
+        
+        [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="CombinedFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class CombinedFilter : HeuristicLab.Clients.OKB.Query.Filter
+    {
+        
+        private System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Filter> FiltersField;
+        
+        private HeuristicLab.Clients.OKB.Query.BooleanOperation OperationField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Filter> Filters
+        {
+            get
+            {
+                return this.FiltersField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.FiltersField, value) != true))
+                {
+                    this.FiltersField = value;
+                    this.RaisePropertyChanged("Filters");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.BooleanOperation Operation
+        {
+            get
+            {
+                return this.OperationField;
+            }
+            set
+            {
+                if ((this.OperationField.Equals(value) != true))
+                {
+                    this.OperationField = value;
+                    this.RaisePropertyChanged("Operation");
+                }
+            }
+        }
+    }
+    
+    [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.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.EqualityComparisonBoolFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameEqualityComparisonBoolFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.EqualityComparisonByteArrayFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameEqualityComparisonByteArrayFilter))]
+    public partial class EqualityComparisonFilter : HeuristicLab.Clients.OKB.Query.Filter
+    {
+        
+        private HeuristicLab.Clients.OKB.Query.EqualityComparison ComparisonField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.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="EqualityComparisonBoolFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameEqualityComparisonBoolFilter))]
+    public partial class EqualityComparisonBoolFilter : HeuristicLab.Clients.OKB.Query.EqualityComparisonFilter
+    {
+        
+        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="NameEqualityComparisonBoolFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameEqualityComparisonBoolFilter : HeuristicLab.Clients.OKB.Query.EqualityComparisonBoolFilter
+    {
+        
+        private string NameField;
+        
+        [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="EqualityComparisonByteArrayFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameEqualityComparisonByteArrayFilter))]
+    public partial class EqualityComparisonByteArrayFilter : HeuristicLab.Clients.OKB.Query.EqualityComparisonFilter
+    {
+        
+        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="NameEqualityComparisonByteArrayFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameEqualityComparisonByteArrayFilter : HeuristicLab.Clients.OKB.Query.EqualityComparisonByteArrayFilter
+    {
+        
+        private string NameField;
+        
+        [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.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.Query.DataTrans" +
+        "fer")]
+    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.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="StringComparison", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public enum StringComparison : 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.Runtime.Serialization.EnumMemberAttribute()]
+        Like = 4,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        NotLike = 5,
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="BooleanOperation", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public enum BooleanOperation : int
+    {
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        And = 0,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Or = 1,
+    }
+    
+    [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.Query.DataTrans" +
+        "fer")]
+    public enum EqualityComparison : int
+    {
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Equal = 0,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        NotEqual = 1,
+    }
+    
+    [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.Query.DataTrans" +
+        "fer")]
+    public partial class Run : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.Query.Algorithm AlgorithmField;
+        
+        private System.Guid ClientIdField;
+        
+        private System.DateTime CreatedDateField;
+        
+        private long IdField;
+        
+        private System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Value> ParameterValuesField;
+        
+        private HeuristicLab.Clients.OKB.Query.Problem ProblemField;
+        
+        private System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Value> ResultValuesField;
+        
+        private System.Guid UserIdField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.Algorithm Algorithm
+        {
+            get
+            {
+                return this.AlgorithmField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.AlgorithmField, value) != true))
+                {
+                    this.AlgorithmField = value;
+                    this.RaisePropertyChanged("Algorithm");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public 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 Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Value> ParameterValues
+        {
+            get
+            {
+                return this.ParameterValuesField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ParameterValuesField, value) != true))
+                {
+                    this.ParameterValuesField = value;
+                    this.RaisePropertyChanged("ParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.Problem Problem
+        {
+            get
+            {
+                return this.ProblemField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true))
+                {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Value> ResultValues
+        {
+            get
+            {
+                return this.ResultValuesField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ResultValuesField, value) != true))
+                {
+                    this.ResultValuesField = value;
+                    this.RaisePropertyChanged("ResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid UserId
+        {
+            get
+            {
+                return this.UserIdField;
+            }
+            set
+            {
+                if ((this.UserIdField.Equals(value) != true))
+                {
+                    this.UserIdField = value;
+                    this.RaisePropertyChanged("UserId");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Algorithm", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class Algorithm : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string AlgorithmClassField;
+        
+        private HeuristicLab.Clients.OKB.Query.DataType DataTypeField;
+        
+        private string DescriptionField;
+        
+        private string NameField;
+        
+        private string PlatformField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string AlgorithmClass
+        {
+            get
+            {
+                return this.AlgorithmClassField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.AlgorithmClassField, value) != true))
+                {
+                    this.AlgorithmClassField = value;
+                    this.RaisePropertyChanged("AlgorithmClass");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.DataType DataType
+        {
+            get
+            {
+                return this.DataTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true))
+                {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public 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 Platform
+        {
+            get
+            {
+                return this.PlatformField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.PlatformField, value) != true))
+                {
+                    this.PlatformField = value;
+                    this.RaisePropertyChanged("Platform");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Problem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class Problem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.Query.DataType DataTypeField;
+        
+        private string DescriptionField;
+        
+        private string NameField;
+        
+        private string PlatformField;
+        
+        private string ProblemClassField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.DataType DataType
+        {
+            get
+            {
+                return this.DataTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true))
+                {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public 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 Platform
+        {
+            get
+            {
+                return this.PlatformField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.PlatformField, value) != true))
+                {
+                    this.PlatformField = value;
+                    this.RaisePropertyChanged("Platform");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string ProblemClass
+        {
+            get
+            {
+                return this.ProblemClassField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ProblemClassField, value) != true))
+                {
+                    this.ProblemClassField = value;
+                    this.RaisePropertyChanged("ProblemClass");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Value", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.StringValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.PercentValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.LongValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.BoolValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.DoubleValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.BinaryValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.FloatValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.TimeSpanValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.IntValue))]
+    public partial class Value : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.Query.DataType DataTypeField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.DataType DataType
+        {
+            get
+            {
+                return this.DataTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true))
+                {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="DataType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class DataType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string NameField;
+        
+        private string TypeNameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string TypeName
+        {
+            get
+            {
+                return this.TypeNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.TypeNameField, value) != true))
+                {
+                    this.TypeNameField = value;
+                    this.RaisePropertyChanged("TypeName");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="StringValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class StringValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private string ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ValueField, value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="PercentValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class PercentValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private double ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public double Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="LongValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class LongValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private long ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="BoolValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class BoolValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private bool ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="DoubleValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class DoubleValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private double ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public double Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="BinaryValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class BinaryValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private byte[] ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public byte[] Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ValueField, value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="FloatValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class FloatValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private float ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public float Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="TimeSpanValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class TimeSpanValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private long ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="IntValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class IntValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private int ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ValueName", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class ValueName : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.Query.ValueNameCategory CategoryField;
+        
+        private long IdField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.ValueNameCategory Category
+        {
+            get
+            {
+                return this.CategoryField;
+            }
+            set
+            {
+                if ((this.CategoryField.Equals(value) != true))
+                {
+                    this.CategoryField = value;
+                    this.RaisePropertyChanged("Category");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ValueNameCategory", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess")]
+    public enum ValueNameCategory : int
+    {
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Parameter = 0,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Result = 1,
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="HeuristicLab.Clients.OKB.Query.IQueryService")]
+    public interface IQueryService
+    {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IQueryService/GetFilters", ReplyAction="http://tempuri.org/IQueryService/GetFiltersResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Filter> GetFilters();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IQueryService/GetNumberOfRuns", ReplyAction="http://tempuri.org/IQueryService/GetNumberOfRunsResponse")]
+        long GetNumberOfRuns(HeuristicLab.Clients.OKB.Query.Filter filter);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IQueryService/GetRunIds", ReplyAction="http://tempuri.org/IQueryService/GetRunIdsResponse")]
+        System.Collections.Generic.List<long> GetRunIds(HeuristicLab.Clients.OKB.Query.Filter filter);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IQueryService/GetRuns", ReplyAction="http://tempuri.org/IQueryService/GetRunsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Run> GetRuns(System.Collections.Generic.List<long> ids, bool includeBinaryValues);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IQueryService/GetRunsWithValues", ReplyAction="http://tempuri.org/IQueryService/GetRunsWithValuesResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Run> GetRunsWithValues(System.Collections.Generic.List<long> ids, bool includeBinaryValues, System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.ValueName> valueNames);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IQueryService/GetValueNames", ReplyAction="http://tempuri.org/IQueryService/GetValueNamesResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.ValueName> GetValueNames();
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IQueryServiceChannel : HeuristicLab.Clients.OKB.Query.IQueryService, System.ServiceModel.IClientChannel
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class QueryServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.OKB.Query.IQueryService>, HeuristicLab.Clients.OKB.Query.IQueryService
+    {
+        
+        public QueryServiceClient()
+        {
+        }
+        
+        public QueryServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName)
+        {
+        }
+        
+        public QueryServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public QueryServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public QueryServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress)
+        {
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Filter> GetFilters()
+        {
+            return base.Channel.GetFilters();
+        }
+        
+        public long GetNumberOfRuns(HeuristicLab.Clients.OKB.Query.Filter filter)
+        {
+            return base.Channel.GetNumberOfRuns(filter);
+        }
+        
+        public System.Collections.Generic.List<long> GetRunIds(HeuristicLab.Clients.OKB.Query.Filter filter)
+        {
+            return base.Channel.GetRunIds(filter);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Run> GetRuns(System.Collections.Generic.List<long> ids, bool includeBinaryValues)
+        {
+            return base.Channel.GetRuns(ids, includeBinaryValues);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Run> GetRunsWithValues(System.Collections.Generic.List<long> ids, bool includeBinaryValues, System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.ValueName> valueNames)
+        {
+            return base.Channel.GetRunsWithValues(ids, includeBinaryValues, valueNames);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.ValueName> GetValueNames()
+        {
+            return base.Channel.GetValueNames();
+        }
+    }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/StringComparisonAvailableValuesFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/StringComparisonAvailableValuesFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/StringComparisonAvailableValuesFilter.cs	(revision 8055)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Query {
+  public partial class StringComparisonAvailableValuesFilter {
+    public override Filter Clone() {
+      return new StringComparisonAvailableValuesFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value, AvailableValues = new List<string>(AvailableValues) };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/StringComparisonFilter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/StringComparisonFilter.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/StringComparisonFilter.cs	(revision 8055)
@@ -0,0 +1,28 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class StringComparisonFilter {
+    public override Filter Clone() {
+      return new StringComparisonFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/ValueName.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/ValueName.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/ValueName.cs	(revision 8055)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.Query {
+  public partial class ValueName {
+    public override string ToString() {
+      string valueNameString = string.Empty;
+
+      if (Category == ValueNameCategory.Parameter) {
+        valueNameString += "Parameter ";
+      } else {
+        valueNameString += "Result ";
+      }
+      valueNameString += Name + " Value";
+      return valueNameString;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyAlgorithm.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyAlgorithm.cs	(revision 8055)
@@ -0,0 +1,92 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("Empty Algorithm", "A dummy algorithm which serves as a placeholder and cannot be executed.")]
+  [StorableClass]
+  [NonDiscoverableType]
+  public sealed class EmptyAlgorithm : HeuristicLab.Optimization.Algorithm {
+    private string exceptionMessage;
+
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    public override bool CanChangeDescription {
+      get { return false; }
+    }
+
+    private ResultCollection results;
+    public override Optimization.ResultCollection Results {
+      get { return results; }
+    }
+
+    #region Persistence Properties
+    [Storable(Name = "ExceptionMessage")]
+    private string ExceptionMessage {
+      get { return exceptionMessage; }
+      set { exceptionMessage = value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private EmptyAlgorithm(bool deserializing)
+      : base(deserializing) {
+      this.results = new ResultCollection();
+    }
+    private EmptyAlgorithm(EmptyAlgorithm original, Cloner cloner)
+      : base(original, cloner) {
+      this.exceptionMessage = original.exceptionMessage;
+      this.results = new ResultCollection();
+    }
+    public EmptyAlgorithm()
+      : base() {
+      results = new ResultCollection();
+    }
+    public EmptyAlgorithm(string exceptionMessage)
+      : this() {
+      this.exceptionMessage = exceptionMessage;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EmptyAlgorithm(this, cloner);
+    }
+
+    public override void Prepare() {
+      throw new InvalidOperationException(string.IsNullOrEmpty(exceptionMessage) ? "Cannot prepare an EmptyAlgorithm." : exceptionMessage);
+    }
+    public override void Start() {
+      throw new InvalidOperationException(string.IsNullOrEmpty(exceptionMessage) ? "Cannot start an EmptyAlgorithm." : exceptionMessage);
+    }
+    public override void Pause() {
+      throw new InvalidOperationException(string.IsNullOrEmpty(exceptionMessage) ? "Cannot pause an EmptyAlgorithm." : exceptionMessage);
+    }
+    public override void Stop() {
+      throw new InvalidOperationException(string.IsNullOrEmpty(exceptionMessage) ? "Cannot stop an EmptyAlgorithm." : exceptionMessage);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyEvaluator.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyEvaluator.cs	(revision 8055)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("EmptyEvaluator", "A dummy evaluator which throws an exception when executed.")]
+  [StorableClass]
+  [NonDiscoverableType]
+  public sealed class EmptyEvaluator : Operator, IEvaluator {
+    private string exceptionMessage;
+
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    public override bool CanChangeDescription {
+      get { return false; }
+    }
+
+    #region Persistence Properties
+    [Storable(Name = "ExceptionMessage")]
+    private string ExceptionMessage {
+      get { return exceptionMessage; }
+      set { exceptionMessage = value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private EmptyEvaluator(bool deserializing) : base(deserializing) { }
+    private EmptyEvaluator(EmptyEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+      exceptionMessage = original.exceptionMessage;
+    }
+    public EmptyEvaluator() : base() { }
+    public EmptyEvaluator(string exceptionMessage)
+      : this() {
+      this.exceptionMessage = exceptionMessage;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EmptyEvaluator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      throw new InvalidOperationException(string.IsNullOrEmpty(exceptionMessage) ? "Cannot execute an EmptyEvaluator. Please choose an appropriate solution evaluator." : exceptionMessage);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyMultiObjectiveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyMultiObjectiveEvaluator.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyMultiObjectiveEvaluator.cs	(revision 8055)
@@ -0,0 +1,81 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("EmptyMultiObjectiveEvaluator", "A dummy multi-objective evaluator which throws an exception when executed.")]
+  [StorableClass]
+  [NonDiscoverableType]
+  public sealed class EmptyMultiObjectiveEvaluator : Operator, IMultiObjectiveEvaluator {
+    private string exceptionMessage;
+
+    public ILookupParameter<DoubleArray> QualitiesParameter {
+      get { return (ILookupParameter<DoubleArray>)Parameters["Qualities"]; }
+    }
+
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    public override bool CanChangeDescription {
+      get { return false; }
+    }
+
+    #region Persistence Properties
+    [Storable(Name = "ExceptionMessage")]
+    private string ExceptionMessage {
+      get { return exceptionMessage; }
+      set { exceptionMessage = value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private EmptyMultiObjectiveEvaluator(bool deserializing) : base(deserializing) { }
+    private EmptyMultiObjectiveEvaluator(EmptyMultiObjectiveEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+      exceptionMessage = original.exceptionMessage;
+    }
+    public EmptyMultiObjectiveEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<DoubleArray>("Qualities", "The evaluated quality values of a solution."));
+    }
+    public EmptyMultiObjectiveEvaluator(string exceptionMessage)
+      : this() {
+      this.exceptionMessage = exceptionMessage;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EmptyMultiObjectiveEvaluator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      throw new InvalidOperationException(string.IsNullOrEmpty(exceptionMessage) ? "Cannot execute an EmptyMultiObjectiveEvaluator. Please choose an appropriate solution evaluator." : exceptionMessage);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyMultiObjectiveProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyMultiObjectiveProblem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyMultiObjectiveProblem.cs	(revision 8055)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("Empty Multi-Objective Problem", "A dummy multi-objective problem which serves as a placeholder and cannot be solved.")]
+  [StorableClass]
+  [NonDiscoverableType]
+  public sealed class EmptyMultiObjectiveProblem : MultiObjectiveHeuristicOptimizationProblem<EmptyMultiObjectiveEvaluator, EmptySolutionCreator> {
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    public override bool CanChangeDescription {
+      get { return false; }
+    }
+
+    [StorableConstructor]
+    private EmptyMultiObjectiveProblem(bool deserializing) : base(deserializing) { }
+    private EmptyMultiObjectiveProblem(EmptyMultiObjectiveProblem original, Cloner cloner) : base(original, cloner) { }
+    public EmptyMultiObjectiveProblem() : base(new EmptyMultiObjectiveEvaluator(), new EmptySolutionCreator()) { }
+    public EmptyMultiObjectiveProblem(string exceptionMessage) : base(new EmptyMultiObjectiveEvaluator(exceptionMessage), new EmptySolutionCreator(exceptionMessage)) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EmptyMultiObjectiveProblem(this, cloner);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyProblem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyProblem.cs	(revision 8055)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("Empty Problem", "A dummy problem which serves as a placeholder and cannot be solved.")]
+  [StorableClass]
+  [NonDiscoverableType]
+  public sealed class EmptyProblem : HeuristicOptimizationProblem<EmptyEvaluator, EmptySolutionCreator> {
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    public override bool CanChangeDescription {
+      get { return false; }
+    }
+
+    [StorableConstructor]
+    private EmptyProblem(bool deserializing) : base(deserializing) { }
+    private EmptyProblem(EmptyProblem original, Cloner cloner) : base(original, cloner) { }
+    public EmptyProblem()
+      : base() {
+      SolutionCreator = new EmptySolutionCreator();
+      Evaluator = new EmptyEvaluator();
+    }
+    public EmptyProblem(string exceptionMessage)
+      : base() {
+      SolutionCreator = new EmptySolutionCreator(exceptionMessage);
+      Evaluator = new EmptyEvaluator(exceptionMessage);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EmptyProblem(this, cloner);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptySingleObjectiveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptySingleObjectiveEvaluator.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptySingleObjectiveEvaluator.cs	(revision 8055)
@@ -0,0 +1,80 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("EmptySingleObjectiveEvaluator", "A dummy single-objective evaluator which throws an exception when executed.")]
+  [StorableClass]
+  [NonDiscoverableType]
+  public sealed class EmptySingleObjectiveEvaluator : Operator, ISingleObjectiveEvaluator {
+    private string exceptionMessage;
+
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    public override bool CanChangeDescription {
+      get { return false; }
+    }
+
+    public ILookupParameter<Data.DoubleValue> QualityParameter {
+      get { return (ILookupParameter<Data.DoubleValue>)Parameters["Quality"]; }
+    }
+
+    #region Persistence Properties
+    [Storable(Name = "ExceptionMessage")]
+    private string ExceptionMessage {
+      get { return exceptionMessage; }
+      set { exceptionMessage = value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private EmptySingleObjectiveEvaluator(bool deserializing) : base(deserializing) { }
+    private EmptySingleObjectiveEvaluator(EmptySingleObjectiveEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+      exceptionMessage = original.exceptionMessage;
+    }
+    public EmptySingleObjectiveEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<Data.DoubleValue>("Quality", "The evaluated quality of a solution."));
+    }
+    public EmptySingleObjectiveEvaluator(string exceptionMessage)
+      : this() {
+      this.exceptionMessage = exceptionMessage;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EmptySingleObjectiveEvaluator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      throw new InvalidOperationException(string.IsNullOrEmpty(exceptionMessage) ? "Cannot execute an EmptySingleObjectiveEvaluator. Please choose an appropriate solution evaluator." : exceptionMessage);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptySingleObjectiveProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptySingleObjectiveProblem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptySingleObjectiveProblem.cs	(revision 8055)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("Empty Single-Objective Problem", "A dummy single-objective problem which serves as a placeholder and cannot be solved.")]
+  [StorableClass]
+  [NonDiscoverableType]
+  public sealed class EmptySingleObjectiveProblem : SingleObjectiveHeuristicOptimizationProblem<EmptySingleObjectiveEvaluator, EmptySolutionCreator> {
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    public override bool CanChangeDescription {
+      get { return false; }
+    }
+
+    [StorableConstructor]
+    private EmptySingleObjectiveProblem(bool deserializing) : base(deserializing) { }
+    private EmptySingleObjectiveProblem(EmptySingleObjectiveProblem original, Cloner cloner) : base(original, cloner) { }
+    public EmptySingleObjectiveProblem() : base(new EmptySingleObjectiveEvaluator(), new EmptySolutionCreator()) { }
+    public EmptySingleObjectiveProblem(string exceptionMessage) : base(new EmptySingleObjectiveEvaluator(exceptionMessage), new EmptySolutionCreator(exceptionMessage)) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EmptySingleObjectiveProblem(this, cloner);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptySolutionCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptySolutionCreator.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptySolutionCreator.cs	(revision 8055)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("EmptySolutionCreator", "A dummy solution creator which throws an exception when executed.")]
+  [StorableClass]
+  [NonDiscoverableType]
+  public sealed class EmptySolutionCreator : Operator, ISolutionCreator {
+    private string exceptionMessage;
+
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    public override bool CanChangeDescription {
+      get { return false; }
+    }
+
+    #region Persistence Properties
+    [Storable(Name = "ExceptionMessage")]
+    private string ExceptionMessage {
+      get { return exceptionMessage; }
+      set { exceptionMessage = value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private EmptySolutionCreator(bool deserializing) : base(deserializing) { }
+    private EmptySolutionCreator(EmptySolutionCreator original, Cloner cloner)
+      : base(original, cloner) {
+      exceptionMessage = original.exceptionMessage;
+    }
+    public EmptySolutionCreator() : base() { }
+    public EmptySolutionCreator(string exceptionMessage)
+      : this() {
+      this.exceptionMessage = exceptionMessage;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EmptySolutionCreator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      throw new InvalidOperationException(string.IsNullOrEmpty(exceptionMessage) ? "Cannot execute an EmptySolutionCreator. Please choose an appropriate solution creator." : exceptionMessage);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ItemWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ItemWrapper.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ItemWrapper.cs	(revision 8055)
@@ -0,0 +1,130 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("ItemWrapper", "A wrapper which wraps an IItem.")]
+  [StorableClass]
+  [NonDiscoverableType]
+  public class ItemWrapper<T> : IItem where T : class, IItem {
+    private T wrappedItem;
+    protected virtual T WrappedItem {
+      get { return wrappedItem; }
+      set {
+        if (value == null) throw new ArgumentNullException("WrappedItem", "WrappedItem cannot be null.");
+        if (value != wrappedItem) {
+          DeregisterWrappedItemEvents();
+          wrappedItem = value;
+          RegisterWrappedItemEvents();
+
+          OnToStringChanged();
+          OnItemImageChanged();
+          OnWrappedItemChanged();
+        }
+      }
+    }
+
+    public virtual string ItemName {
+      get { return wrappedItem.ItemName; }
+    }
+    public virtual string ItemDescription {
+      get { return wrappedItem.ItemDescription; }
+    }
+    public Version ItemVersion {
+      get { return wrappedItem.ItemVersion; }
+    }
+    public virtual Image ItemImage {
+      get { return WrappedItem.ItemImage; }
+    }
+
+    #region Persistence Properties
+    [Storable(Name = "WrappedItem")]
+    private T StorableWrappedItem {
+      get { return wrappedItem; }
+      set {
+        wrappedItem = value;
+        RegisterWrappedItemEvents();
+      }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected ItemWrapper(bool deserializing) { }
+    protected ItemWrapper(ItemWrapper<T> original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      wrappedItem = cloner.Clone(original.wrappedItem);
+      RegisterWrappedItemEvents();
+    }
+    public ItemWrapper(T item) {
+      if (item == null) throw new ArgumentNullException("item", "ItemWrapper cannot wrap a null reference.");
+      wrappedItem = item;
+      RegisterWrappedItemEvents();
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new ItemWrapper<T>(this, cloner);
+    }
+
+    public override string ToString() {
+      return wrappedItem.ToString();
+    }
+
+    protected virtual void OnWrappedItemChanged() { }
+
+    #region Events
+    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);
+    }
+
+    protected virtual void RegisterWrappedItemEvents() {
+      WrappedItem.ToStringChanged += new EventHandler(WrappedItem_ToStringChanged);
+      WrappedItem.ItemImageChanged += new EventHandler(WrappedItem_ItemImageChanged);
+    }
+    protected virtual void DeregisterWrappedItemEvents() {
+      WrappedItem.ToStringChanged -= new EventHandler(WrappedItem_ToStringChanged);
+      WrappedItem.ItemImageChanged -= new EventHandler(WrappedItem_ItemImageChanged);
+    }
+
+    protected virtual void WrappedItem_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+    protected virtual void WrappedItem_ItemImageChanged(object sender, EventArgs e) {
+      OnItemImageChanged();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/MissingClientRegistrationException.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/MissingClientRegistrationException.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/MissingClientRegistrationException.cs	(revision 8055)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  public class MissingClientRegistrationException : Exception {
+    public MissingClientRegistrationException() : base("To be able to store runs, you need to register your client first.") { }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/MultiObjectiveOKBProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/MultiObjectiveOKBProblem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/MultiObjectiveOKBProblem.cs	(revision 8055)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("Multi-Objective OKB Problem", "Represents a multi-objective problem which is stored in the OKB.")]
+  [Creatable("Optimization Knowledge Base (OKB)")]
+  [StorableClass]
+  public sealed class MultiObjectiveOKBProblem : OKBProblem, IMultiObjectiveHeuristicOptimizationProblem, IStorableContent {
+    public string Filename { get; set; }
+
+    public override Type ProblemType {
+      get { return typeof(IMultiObjectiveHeuristicOptimizationProblem); }
+    }
+    public new IMultiObjectiveHeuristicOptimizationProblem Problem {
+      get { return base.Problem as IMultiObjectiveHeuristicOptimizationProblem; }
+    }
+    public IParameter MaximizationParameter {
+      get { return Problem.MaximizationParameter; }
+    }
+    public new IMultiObjectiveEvaluator Evaluator {
+      get { return Problem.Evaluator; }
+    }
+
+    [StorableConstructor]
+    private MultiObjectiveOKBProblem(bool deserializing) : base(deserializing) { }
+    private MultiObjectiveOKBProblem(MultiObjectiveOKBProblem original, Cloner cloner) : base(original, cloner) { }
+    public MultiObjectiveOKBProblem() : base(new EmptyMultiObjectiveProblem("No problem selected. Please choose a multi-objective problem instance from the OKB.")) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiObjectiveOKBProblem(this, cloner);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/NamedItemWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/NamedItemWrapper.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/NamedItemWrapper.cs	(revision 8055)
@@ -0,0 +1,116 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("NamedItemWrapper", "A wrapper which wraps an INamedItem.")]
+  [StorableClass]
+  [NonDiscoverableType]
+  public class NamedItemWrapper<T> : ItemWrapper<T>, INamedItem where T : class, INamedItem {
+    protected override T WrappedItem {
+      get { return base.WrappedItem; }
+      set {
+        if (value == null) throw new ArgumentNullException("WrappedItem", "WrappedItem cannot be null.");
+        if (value != base.WrappedItem) {
+          CancelEventArgs<string> e = new CancelEventArgs<string>(value.Name);
+          OnNameChanging(e);
+          if (!e.Cancel) base.WrappedItem = value;
+        }
+      }
+    }
+
+    public virtual string Name {
+      get { return WrappedItem.Name; }
+      set { WrappedItem.Name = value; }
+    }
+    public virtual bool CanChangeName {
+      get { return WrappedItem.CanChangeName; }
+    }
+    public virtual string Description {
+      get { return WrappedItem.Description; }
+      set { WrappedItem.Description = value; }
+    }
+    public virtual bool CanChangeDescription {
+      get { return WrappedItem.CanChangeDescription; }
+    }
+
+    [StorableConstructor]
+    protected NamedItemWrapper(bool deserializing) : base(deserializing) { }
+    protected NamedItemWrapper(NamedItemWrapper<T> original, Cloner cloner) : base(original, cloner) { }
+    public NamedItemWrapper(T item) : base(item) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new NamedItemWrapper<T>(this, cloner);
+    }
+
+    protected override void OnWrappedItemChanged() {
+      base.OnWrappedItemChanged();
+      OnNameChanged();
+      OnDescriptionChanged();
+    }
+
+    #region Events
+    public event EventHandler<CancelEventArgs<string>> NameChanging;
+    protected virtual void OnNameChanging(CancelEventArgs<string> e) {
+      var handler = NameChanging;
+      if (handler != null) handler(this, e);
+    }
+    public event EventHandler NameChanged;
+    protected virtual void OnNameChanged() {
+      var handler = NameChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler DescriptionChanged;
+    protected virtual void OnDescriptionChanged() {
+      var handler = DescriptionChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    protected override void RegisterWrappedItemEvents() {
+      base.RegisterWrappedItemEvents();
+      WrappedItem.NameChanging += new EventHandler<CancelEventArgs<string>>(WrappedItem_NameChanging);
+      WrappedItem.NameChanged += new EventHandler(WrappedItem_NameChanged);
+      WrappedItem.DescriptionChanged += new EventHandler(WrappedItem_DescriptionChanged);
+    }
+    protected override void DeregisterWrappedItemEvents() {
+      WrappedItem.NameChanging -= new EventHandler<CancelEventArgs<string>>(WrappedItem_NameChanging);
+      WrappedItem.NameChanged -= new EventHandler(WrappedItem_NameChanged);
+      WrappedItem.DescriptionChanged -= new EventHandler(WrappedItem_DescriptionChanged);
+      base.DeregisterWrappedItemEvents();
+    }
+
+    protected virtual void WrappedItem_NameChanging(object sender, CancelEventArgs<string> e) {
+      OnNameChanging(e);
+    }
+    protected virtual void WrappedItem_NameChanged(object sender, EventArgs e) {
+      OnNameChanged();
+    }
+    protected virtual void WrappedItem_DescriptionChanged(object sender, EventArgs e) {
+      OnDescriptionChanged();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBAlgorithm.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBAlgorithm.cs	(revision 8055)
@@ -0,0 +1,458 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Drawing;
+using System.IO;
+using System.Linq;
+using HeuristicLab.Clients.Access;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence.Default.Xml;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("OKB Algorithm", "An algorithm which is stored in the OKB.")]
+  [Creatable("Optimization Knowledge Base (OKB)")]
+  [StorableClass]
+  public sealed class OKBAlgorithm : Item, IAlgorithm, IStorableContent {
+    public string Filename { get; set; }
+
+    private long algorithmId;
+    public long AlgorithmId {
+      get { return algorithmId; }
+    }
+    private IAlgorithm algorithm;
+    private IAlgorithm Algorithm {
+      get { return algorithm; }
+      set {
+        if (value == null) throw new ArgumentNullException("Algorithm", "Algorithm cannot be null.");
+        if (value != algorithm) {
+          CancelEventArgs<string> e = new CancelEventArgs<string>(value.Name);
+          OnNameChanging(e);
+          if (!e.Cancel) {
+            IProblem problem = algorithm.Problem;
+            DeregisterAlgorithmEvents();
+            algorithm = value;
+            RegisterAlgorithmEvents();
+
+            OnToStringChanged();
+            OnItemImageChanged();
+            OnNameChanged();
+            OnDescriptionChanged();
+            OnAlgorithmChanged();
+            OnStoreAlgorithmInEachRunChanged();
+
+            try {
+              algorithm.Problem = problem;
+            }
+            catch (ArgumentException) {
+              algorithm.Problem = null;
+            }
+            algorithm.Prepare(true);
+          }
+        }
+      }
+    }
+
+    public IEnumerable<IOptimizer> NestedOptimizers {
+      get {
+        // inner algorithm cannot be accessed directly
+        return Enumerable.Empty<IOptimizer>();
+      }
+    }
+
+    public override Image ItemImage {
+      get { return Algorithm.ItemImage; }
+    }
+
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Event; }
+    }
+
+    public string Name {
+      get { return Algorithm.Name; }
+      set { throw new NotSupportedException("Name cannot be changed."); }
+    }
+    public string Description {
+      get { return Algorithm.Description; }
+      set { throw new NotSupportedException("Description cannot be changed."); }
+    }
+    public bool CanChangeName {
+      get { return false; }
+    }
+    public bool CanChangeDescription {
+      get { return false; }
+    }
+
+    public IKeyedItemCollection<string, IParameter> Parameters {
+      get { return Algorithm.Parameters; }
+    }
+
+    public ExecutionState ExecutionState {
+      get { return Algorithm.ExecutionState; }
+    }
+    public TimeSpan ExecutionTime {
+      get { return Algorithm.ExecutionTime; }
+    }
+
+    public Type ProblemType {
+      get { return Algorithm.ProblemType; }
+    }
+    public IProblem Problem {
+      get { return Algorithm.Problem; }
+      set { Algorithm.Problem = value; }
+    }
+
+    public ResultCollection Results {
+      get { return Algorithm.Results; }
+    }
+
+    private RunCollection runs;
+    public RunCollection Runs {
+      get { return runs; }
+    }
+    private bool storeRunsAutomatically;
+    public bool StoreRunsAutomatically {
+      get { return storeRunsAutomatically; }
+      set {
+        if (value != storeRunsAutomatically) {
+          storeRunsAutomatically = value;
+          OnStoreRunsAutomaticallyChanged();
+        }
+      }
+    }
+    public bool StoreAlgorithmInEachRun {
+      get { return Algorithm.StoreAlgorithmInEachRun; }
+      set { Algorithm.StoreAlgorithmInEachRun = value; }
+    }
+
+    #region Persistence Properties
+    [Storable]
+    private Guid UserId;
+
+    [Storable(Name = "AlgorithmId")]
+    private long StorableAlgorithmId {
+      get { return algorithmId; }
+      set { algorithmId = value; }
+    }
+    [Storable(Name = "Algorithm")]
+    private IAlgorithm StorableAlgorithm {
+      get { return algorithm; }
+      set {
+        algorithm = value;
+        RegisterAlgorithmEvents();
+      }
+    }
+    [Storable(Name = "Runs")]
+    private RunCollection StorableRuns {
+      get { return runs; }
+      set {
+        runs = value;
+        RegisterRunsEvents();
+      }
+    }
+    [Storable(Name = "StoreRunsAutomatically")]
+    private bool StorableStoreRunsAutomatically {
+      get { return storeRunsAutomatically; }
+      set { storeRunsAutomatically = value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private OKBAlgorithm(bool deserializing) : base(deserializing) { }
+    private OKBAlgorithm(OKBAlgorithm original, Cloner cloner)
+      : base(original, cloner) {
+      algorithmId = original.algorithmId;
+      algorithm = cloner.Clone(original.algorithm);
+      RegisterAlgorithmEvents();
+      runs = cloner.Clone(original.runs);
+      storeRunsAutomatically = original.storeRunsAutomatically;
+      UserId = original.UserId;
+      RegisterRunsEvents();
+    }
+    public OKBAlgorithm()
+      : base() {
+      algorithmId = -1;
+      algorithm = new EmptyAlgorithm("No algorithm selected. Please choose an algorithm from the OKB.");
+      RegisterAlgorithmEvents();
+      runs = new RunCollection();
+      storeRunsAutomatically = true;
+      CheckUserPermissions();
+      RegisterRunsEvents();
+    }
+
+    private void CheckUserPermissions() {
+      if (UserInformation.Instance.UserExists) {
+        if (UserInformation.Instance.User.Roles.Count(x => x.Name == OKBRoles.OKBUser || x.Name == OKBRoles.OKBAdministrator) > 0) {
+          UserId = UserInformation.Instance.User.Id;
+        } else {
+          throw new Exception("You don't have the appropriate roles for executing OKB Algorithms.");
+        }
+      } else {
+        throw new Exception("You need an user account for executing OKB Algorithms.");
+      }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OKBAlgorithm(this, cloner);
+    }
+
+    public void Load(long algorithmId) {
+      if (this.algorithmId != algorithmId) {
+        IAlgorithm algorithm;
+        byte[] algorithmData = RunCreationClient.GetAlgorithmData(algorithmId);
+        using (MemoryStream stream = new MemoryStream(algorithmData)) {
+          algorithm = XmlParser.Deserialize<IAlgorithm>(stream);
+        }
+        this.algorithmId = algorithmId;
+        Algorithm = algorithm;
+      }
+    }
+
+    public IAlgorithm CloneAlgorithm() {
+      return (IAlgorithm)Algorithm.Clone();
+    }
+
+    public void CollectParameterValues(IDictionary<string, IItem> values) {
+      Algorithm.CollectParameterValues(values);
+    }
+    public void CollectResultValues(IDictionary<string, IItem> values) {
+      Algorithm.CollectResultValues(values);
+    }
+
+    public void Prepare() {
+      Algorithm.Prepare();
+    }
+    public void Prepare(bool clearRuns) {
+      if (clearRuns) runs.Clear();
+      Algorithm.Prepare(clearRuns);
+    }
+    public void Start() {
+      if (!ClientInformation.Instance.ClientExists && storeRunsAutomatically) {
+        throw new Exception("To be able to store runs automatically, you need to register your client first.");
+      }
+      Algorithm.Start();
+    }
+    public void Pause() {
+      Algorithm.Pause();
+    }
+    public void Stop() {
+      Algorithm.Stop();
+    }
+
+    #region Events
+    public event EventHandler AlgorithmChanged;
+    private void OnAlgorithmChanged() {
+      EventHandler handler = AlgorithmChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler<CancelEventArgs<string>> NameChanging;
+    private void OnNameChanging(CancelEventArgs<string> e) {
+      var handler = NameChanging;
+      if (handler != null) handler(this, e);
+    }
+    public event EventHandler NameChanged;
+    private void OnNameChanged() {
+      var handler = NameChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler DescriptionChanged;
+    private void OnDescriptionChanged() {
+      var handler = DescriptionChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ExecutionStateChanged;
+    private void OnExecutionStateChanged() {
+      var handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ExecutionTimeChanged;
+    private void OnExecutionTimeChanged() {
+      var handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ProblemChanged;
+    private void OnProblemChanged() {
+      var handler = ProblemChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler StoreRunsAutomaticallyChanged;
+    private void OnStoreRunsAutomaticallyChanged() {
+      var handler = StoreRunsAutomaticallyChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler StoreAlgorithmInEachRunChanged;
+    private void OnStoreAlgorithmInEachRunChanged() {
+      var handler = StoreAlgorithmInEachRunChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Prepared;
+    private void OnPrepared() {
+      var handler = Prepared;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Started;
+    private void OnStarted() {
+      var handler = Started;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Paused;
+    private void OnPaused() {
+      var handler = Paused;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Stopped;
+    private void OnStopped() {
+      var handler = Stopped;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
+    private void OnExceptionOccurred(Exception exception) {
+      var handler = ExceptionOccurred;
+      if (handler != null) handler(this, new EventArgs<Exception>(exception));
+    }
+
+    private void RegisterAlgorithmEvents() {
+      if (Algorithm != null) {
+        Algorithm.ToStringChanged += new EventHandler(Algorithm_ToStringChanged);
+        Algorithm.ItemImageChanged += new EventHandler(Algorithm_ItemImageChanged);
+        Algorithm.NameChanging += new EventHandler<CancelEventArgs<string>>(Algorithm_NameChanging);
+        Algorithm.NameChanged += new EventHandler(Algorithm_NameChanged);
+        Algorithm.DescriptionChanged += new EventHandler(Algorithm_DescriptionChanged);
+        Algorithm.ExecutionStateChanged += new EventHandler(Algorithm_ExecutionStateChanged);
+        Algorithm.ExecutionTimeChanged += new EventHandler(Algorithm_ExecutionTimeChanged);
+        Algorithm.ProblemChanged += new EventHandler(Algorithm_ProblemChanged);
+        Algorithm.Runs.ItemsAdded += new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsAdded);
+        Algorithm.StoreAlgorithmInEachRunChanged += new EventHandler(Algorithm_StoreAlgorithmInEachRunChanged);
+        Algorithm.Prepared += new EventHandler(Algorithm_Prepared);
+        Algorithm.Started += new EventHandler(Algorithm_Started);
+        Algorithm.Paused += new EventHandler(Algorithm_Paused);
+        Algorithm.Stopped += new EventHandler(Algorithm_Stopped);
+        Algorithm.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Algorithm_ExceptionOccurred);
+      }
+    }
+    private void DeregisterAlgorithmEvents() {
+      if (Algorithm != null) {
+        Algorithm.ToStringChanged -= new EventHandler(Algorithm_ToStringChanged);
+        Algorithm.ItemImageChanged -= new EventHandler(Algorithm_ItemImageChanged);
+        Algorithm.NameChanging -= new EventHandler<CancelEventArgs<string>>(Algorithm_NameChanging);
+        Algorithm.NameChanged -= new EventHandler(Algorithm_NameChanged);
+        Algorithm.DescriptionChanged -= new EventHandler(Algorithm_DescriptionChanged);
+        Algorithm.ExecutionStateChanged -= new EventHandler(Algorithm_ExecutionStateChanged);
+        Algorithm.ExecutionTimeChanged -= new EventHandler(Algorithm_ExecutionTimeChanged);
+        Algorithm.ProblemChanged -= new EventHandler(Algorithm_ProblemChanged);
+        Algorithm.Runs.ItemsAdded -= new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsAdded);
+        Algorithm.StoreAlgorithmInEachRunChanged -= new EventHandler(Algorithm_StoreAlgorithmInEachRunChanged);
+        Algorithm.Prepared -= new EventHandler(Algorithm_Prepared);
+        Algorithm.Started -= new EventHandler(Algorithm_Started);
+        Algorithm.Paused -= new EventHandler(Algorithm_Paused);
+        Algorithm.Stopped -= new EventHandler(Algorithm_Stopped);
+        Algorithm.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Algorithm_ExceptionOccurred);
+      }
+    }
+
+    private void Algorithm_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+    private void Algorithm_ItemImageChanged(object sender, EventArgs e) {
+      OnItemImageChanged();
+    }
+    private void Algorithm_NameChanging(object sender, CancelEventArgs<string> e) {
+      OnNameChanging(e);
+    }
+    private void Algorithm_NameChanged(object sender, EventArgs e) {
+      OnNameChanged();
+    }
+    private void Algorithm_DescriptionChanged(object sender, EventArgs e) {
+      OnDescriptionChanged();
+    }
+    private void Algorithm_ExecutionStateChanged(object sender, EventArgs e) {
+      OnExecutionStateChanged();
+    }
+    private void Algorithm_ExecutionTimeChanged(object sender, EventArgs e) {
+      OnExecutionTimeChanged();
+    }
+    private void Algorithm_ProblemChanged(object sender, EventArgs e) {
+      OnProblemChanged();
+    }
+    private void Algorithm_Runs_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      OKBProblem problem = Problem as OKBProblem;
+      foreach (IRun run in e.Items) {
+        if (problem != null) {
+          OKBRun okbRun = new OKBRun(AlgorithmId, problem.ProblemId, run, UserId);
+          runs.Add(okbRun);
+          if (StoreRunsAutomatically) {
+            try { okbRun.Store(); }
+            catch (Exception) { }
+          }
+        } else {
+          runs.Add(run);
+        }
+      }
+    }
+    private void Algorithm_StoreAlgorithmInEachRunChanged(object sender, EventArgs e) {
+      OnStoreAlgorithmInEachRunChanged();
+    }
+    private void Algorithm_Prepared(object sender, EventArgs e) {
+      OnPrepared();
+    }
+    private void Algorithm_Started(object sender, EventArgs e) {
+      OnStarted();
+    }
+    private void Algorithm_Paused(object sender, EventArgs e) {
+      OnPaused();
+    }
+    private void Algorithm_Stopped(object sender, EventArgs e) {
+      OnStopped();
+    }
+    private void Algorithm_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+      OnExceptionOccurred(e.Value);
+    }
+
+    private void RegisterRunsEvents() {
+      runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(runs_ItemsRemoved);
+      runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
+    }
+    private void runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      foreach (IRun run in e.Items) {
+        OKBRun okbRun = run as OKBRun;
+        if (okbRun != null)
+          Algorithm.Runs.Remove(okbRun.WrappedRun);
+        else
+          Algorithm.Runs.Remove(run);
+      }
+    }
+    private void Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      foreach (IRun run in e.OldItems) {
+        OKBRun okbRun = run as OKBRun;
+        if (okbRun != null)
+          Algorithm.Runs.Remove(okbRun.WrappedRun);
+        else
+          Algorithm.Runs.Remove(run);
+      }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBProblem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBProblem.cs	(revision 8055)
@@ -0,0 +1,265 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.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.RunCreation {
+  [Item("OKB Problem", "A base class for problems which are stored in the OKB.")]
+  [StorableClass]
+  public abstract class OKBProblem : Item, IHeuristicOptimizationProblem {
+    public virtual Type ProblemType {
+      get { return typeof(IHeuristicOptimizationProblem); }
+    }
+    private long problemId;
+    public long ProblemId {
+      get { return problemId; }
+    }
+    private IHeuristicOptimizationProblem problem;
+    protected IHeuristicOptimizationProblem Problem {
+      get { return problem; }
+      private set {
+        if (value == null) throw new ArgumentNullException("Problem", "Problem cannot be null.");
+        if (value != problem) {
+          CancelEventArgs<string> e = new CancelEventArgs<string>(value.Name);
+          OnNameChanging(e);
+          if (!e.Cancel) {
+            DeregisterProblemEvents();
+            problem = value;
+            RegisterProblemEvents();
+
+            OnToStringChanged();
+            OnItemImageChanged();
+            OnNameChanged();
+            OnDescriptionChanged();
+            OnProblemChanged();
+            OnSolutionCreatorChanged();
+            OnEvaluatorChanged();
+            OnOperatorsChanged();
+            OnReset();
+          }
+        }
+      }
+    }
+
+    public override Image ItemImage {
+      get { return Problem.ItemImage; }
+    }
+
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; }
+    }
+
+    public string Name {
+      get { return Problem.Name; }
+      set { throw new NotSupportedException("Name cannot be changed."); }
+    }
+    public string Description {
+      get { return Problem.Description; }
+      set { throw new NotSupportedException("Description cannot be changed."); }
+    }
+    public bool CanChangeName {
+      get { return false; }
+    }
+    public bool CanChangeDescription {
+      get { return false; }
+    }
+
+    public IKeyedItemCollection<string, IParameter> Parameters {
+      get { return Problem.Parameters; }
+    }
+
+    public IParameter SolutionCreatorParameter {
+      get { return Problem.SolutionCreatorParameter; }
+    }
+    public ISolutionCreator SolutionCreator {
+      get { return Problem.SolutionCreator; }
+    }
+    public IParameter EvaluatorParameter {
+      get { return Problem.EvaluatorParameter; }
+    }
+    public IEvaluator Evaluator {
+      get { return Problem.Evaluator; }
+    }
+    public IEnumerable<IItem> Operators {
+      get { return Problem.Operators; }
+    }
+
+    #region Persistence Properties
+    [Storable(Name = "ProblemId")]
+    private long StorableProblemId {
+      get { return problemId; }
+      set { problemId = value; }
+    }
+    [Storable(Name = "Problem")]
+    private IHeuristicOptimizationProblem StorableProblem {
+      get { return problem; }
+      set {
+        problem = value;
+        RegisterProblemEvents();
+      }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected OKBProblem(bool deserializing) : base(deserializing) { }
+    protected OKBProblem(OKBProblem original, Cloner cloner)
+      : base(original, cloner) {
+      problemId = original.problemId;
+      problem = cloner.Clone(original.problem);
+      RegisterProblemEvents();
+    }
+    protected OKBProblem(IHeuristicOptimizationProblem initialProblem)
+      : base() {
+      if (initialProblem == null) throw new ArgumentNullException("initialProblem", "Initial problem cannot be null.");
+      problemId = -1;
+      problem = initialProblem;
+      RegisterProblemEvents();
+    }
+
+    public void Load(long problemId) {
+      if (this.problemId != problemId) {
+        IHeuristicOptimizationProblem problem;
+        byte[] problemData = RunCreationClient.GetProblemData(problemId);
+        using (MemoryStream stream = new MemoryStream(problemData)) {
+          problem = XmlParser.Deserialize<IHeuristicOptimizationProblem>(stream);
+        }
+        if (ProblemType.IsAssignableFrom(problem.GetType())) {
+          this.problemId = problemId;
+          Problem = problem;
+        }
+      }
+    }
+
+    public IProblem CloneProblem() {
+      return (IProblem)Problem.Clone();
+    }
+
+    public void CollectParameterValues(IDictionary<string, IItem> values) {
+      Problem.CollectParameterValues(values);
+    }
+
+    #region Events
+    public event EventHandler ProblemChanged;
+    protected virtual void OnProblemChanged() {
+      EventHandler handler = ProblemChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler<CancelEventArgs<string>> NameChanging;
+    protected virtual void OnNameChanging(CancelEventArgs<string> e) {
+      var handler = NameChanging;
+      if (handler != null) handler(this, e);
+    }
+    public event EventHandler NameChanged;
+    protected virtual void OnNameChanged() {
+      var handler = NameChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler DescriptionChanged;
+    protected virtual void OnDescriptionChanged() {
+      var handler = DescriptionChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler SolutionCreatorChanged;
+    protected virtual void OnSolutionCreatorChanged() {
+      var handler = SolutionCreatorChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler EvaluatorChanged;
+    protected virtual void OnEvaluatorChanged() {
+      var handler = EvaluatorChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler OperatorsChanged;
+    protected virtual void OnOperatorsChanged() {
+      var handler = OperatorsChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Reset;
+    protected virtual void OnReset() {
+      var handler = Reset;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    protected virtual void RegisterProblemEvents() {
+      if (Problem != null) {
+        Problem.ToStringChanged += new EventHandler(Problem_ToStringChanged);
+        Problem.ItemImageChanged += new EventHandler(Problem_ItemImageChanged);
+        Problem.NameChanging += new EventHandler<CancelEventArgs<string>>(Problem_NameChanging);
+        Problem.NameChanged += new EventHandler(Problem_NameChanged);
+        Problem.DescriptionChanged += new EventHandler(Problem_DescriptionChanged);
+        Problem.SolutionCreatorChanged += new EventHandler(Problem_SolutionCreatorChanged);
+        Problem.EvaluatorChanged += new EventHandler(Problem_EvaluatorChanged);
+        Problem.OperatorsChanged += new EventHandler(Problem_OperatorsChanged);
+        Problem.Reset += new EventHandler(Problem_Reset);
+      }
+    }
+    protected virtual void DeregisterProblemEvents() {
+      if (Problem != null) {
+        Problem.ToStringChanged -= new EventHandler(Problem_ToStringChanged);
+        Problem.ItemImageChanged -= new EventHandler(Problem_ItemImageChanged);
+        Problem.NameChanging -= new EventHandler<CancelEventArgs<string>>(Problem_NameChanging);
+        Problem.NameChanged -= new EventHandler(Problem_NameChanged);
+        Problem.DescriptionChanged -= new EventHandler(Problem_DescriptionChanged);
+        Problem.SolutionCreatorChanged -= new EventHandler(Problem_SolutionCreatorChanged);
+        Problem.EvaluatorChanged -= new EventHandler(Problem_EvaluatorChanged);
+        Problem.OperatorsChanged -= new EventHandler(Problem_OperatorsChanged);
+        Problem.Reset -= new EventHandler(Problem_Reset);
+      }
+    }
+
+    private void Problem_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+    private void Problem_ItemImageChanged(object sender, EventArgs e) {
+      OnItemImageChanged();
+    }
+    private void Problem_NameChanging(object sender, CancelEventArgs<string> e) {
+      OnNameChanging(e);
+    }
+    private void Problem_NameChanged(object sender, EventArgs e) {
+      OnNameChanged();
+    }
+    private void Problem_DescriptionChanged(object sender, EventArgs e) {
+      OnDescriptionChanged();
+    }
+    private void Problem_SolutionCreatorChanged(object sender, EventArgs e) {
+      OnSolutionCreatorChanged();
+    }
+    private void Problem_EvaluatorChanged(object sender, EventArgs e) {
+      OnEvaluatorChanged();
+    }
+    private void Problem_OperatorsChanged(object sender, EventArgs e) {
+      OnOperatorsChanged();
+    }
+    private void Problem_Reset(object sender, EventArgs e) {
+      OnReset();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBRun.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBRun.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBRun.cs	(revision 8055)
@@ -0,0 +1,248 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Drawing;
+using System.IO;
+using HeuristicLab.Clients.Access;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence.Default.Xml;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("OKB Run", "The parameters and results of an algorithm run which are stored in the OKB.")]
+  [StorableClass]
+  public sealed class OKBRun : NamedItemWrapper<IRun>, IRun, IStorableContent {
+    public string Filename { get; set; }
+
+    public override Image ItemImage {
+      get { return Stored ? HeuristicLab.Common.Resources.VSImageLibrary.Database : HeuristicLab.Common.Resources.VSImageLibrary.DatabaseModified; }
+    }
+
+    private long algorithmId;
+    private long problemId;
+    private DateTime createdDate;
+
+    private bool stored;
+    public bool Stored {
+      get { return stored; }
+      private set {
+        if (value != stored) {
+          stored = value;
+          OnStoredChanged();
+          OnItemImageChanged();
+        }
+      }
+    }
+
+    public IAlgorithm Algorithm {
+      get { return WrappedItem.Algorithm; }
+    }
+    public IDictionary<string, IItem> Parameters {
+      get { return WrappedItem.Parameters; }
+    }
+    public IDictionary<string, IItem> Results {
+      get { return WrappedItem.Results; }
+    }
+    public IRun WrappedRun {
+      get { return WrappedItem; }
+    }
+
+    public Color Color {
+      get { return WrappedItem.Color; }
+      set { WrappedItem.Color = value; }
+    }
+    public bool Visible {
+      get { return WrappedItem.Visible; }
+      set { WrappedItem.Visible = value; }
+    }
+
+    #region Persistence Properties
+    [Storable]
+    private Guid UserId;
+
+    [Storable]
+    private Guid ClientId;
+
+    [Storable(Name = "Stored")]
+    private bool StorableStored {
+      get { return stored; }
+      set { stored = value; }
+    }
+    [Storable(Name = "AlgorithmId")]
+    private long StorableAlgorithmId {
+      get { return algorithmId; }
+      set { algorithmId = value; }
+    }
+    [Storable(Name = "ProblemId")]
+    private long StorableProblemId {
+      get { return problemId; }
+      set { problemId = value; }
+    }
+    [Storable(Name = "CreatedDate")]
+    private DateTime StorableCreatedDate {
+      get { return createdDate; }
+      set { createdDate = value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private OKBRun(bool deserializing) : base(deserializing) { }
+    private OKBRun(OKBRun original, Cloner cloner)
+      : base(original, cloner) {
+      algorithmId = original.algorithmId;
+      problemId = original.problemId;
+      createdDate = original.createdDate;
+      stored = original.stored;
+      UserId = original.UserId;
+      ClientId = original.ClientId;
+    }
+    public OKBRun(long algorithmId, long problemId, IRun run, Guid userId)
+      : base(run) {
+      this.algorithmId = algorithmId;
+      this.problemId = problemId;
+      this.createdDate = DateTime.Now;
+      this.stored = false;
+      this.UserId = userId;
+      if (ClientInformation.Instance.ClientExists) {
+        this.ClientId = ClientInformation.Instance.ClientInfo.Id;
+      } else {
+        this.ClientId = Guid.Empty;
+      }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OKBRun(this, cloner);
+    }
+
+    public void Store() {
+      if (Stored) throw new InvalidOperationException("Cannot store already stored run.");
+      if (!ClientInformation.Instance.ClientExists) {
+        throw new MissingClientRegistrationException();
+      }
+
+      //if user has now registered his client...
+      if (ClientId == Guid.Empty) {
+        ClientId = ClientInformation.Instance.ClientInfo.Id;
+      }
+
+      Run run = new Run();
+      run.AlgorithmId = algorithmId;
+      run.ProblemId = problemId;
+      run.UserId = UserId;
+      run.ClientId = ClientId;
+      run.CreatedDate = createdDate;
+      run.ParameterValues = ConvertToValues(Parameters);
+      run.ResultValues = ConvertToValues(Results);
+      RunCreationClient.Instance.AddRun(run);
+
+      Stored = true;
+    }
+
+    #region Events
+    public event EventHandler Changed;
+    private void OnChanged() {
+      var handler = Changed;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler StoredChanged;
+    private void OnStoredChanged() {
+      var handler = StoredChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    protected override void RegisterWrappedItemEvents() {
+      base.RegisterWrappedItemEvents();
+      WrappedItem.Changed += new EventHandler(WrappedItem_Changed);
+    }
+    protected override void DeregisterWrappedItemEvents() {
+      WrappedItem.Changed -= new EventHandler(WrappedItem_Changed);
+      base.DeregisterWrappedItemEvents();
+    }
+
+    private void WrappedItem_Changed(object sender, EventArgs e) {
+      OnChanged();
+    }
+    #endregion
+
+    #region Helpers
+    List<Value> ConvertToValues(IDictionary<string, IItem> items) {
+      List<Value> values = new List<Value>();
+      bool add = true;
+      foreach (var item in items) {
+        Value value;
+        if (item.Value is Data.BoolValue) {
+          BoolValue v = new BoolValue();
+          v.Value = ((Data.BoolValue)item.Value).Value;
+          value = v;
+        } else if (item.Value is Data.IntValue) {
+          IntValue v = new IntValue();
+          v.Value = ((Data.IntValue)item.Value).Value;
+          value = v;
+        } else if (item.Value is Data.TimeSpanValue) {
+          TimeSpanValue v = new TimeSpanValue();
+          v.Value = (long)((Data.TimeSpanValue)item.Value).Value.TotalSeconds;
+          value = v;
+        } else if (item.Value is Data.PercentValue) {
+          PercentValue v = new PercentValue();
+          v.Value = ((Data.PercentValue)item.Value).Value;
+          value = v;
+          if (double.IsNaN(v.Value)) {
+            add = false;
+          }
+        } else if (item.Value is Data.DoubleValue) {
+          DoubleValue v = new DoubleValue();
+          v.Value = ((Data.DoubleValue)item.Value).Value;
+          value = v;
+          if (double.IsNaN(v.Value)) {
+            add = false;
+          }
+        } else if (item.Value is Data.StringValue) {
+          StringValue v = new StringValue();
+          v.Value = ((Data.StringValue)item.Value).Value;
+          value = v;
+        } else {
+          BinaryValue v = new BinaryValue();
+          using (MemoryStream stream = new MemoryStream()) {
+            XmlGenerator.Serialize(item.Value, stream);
+            stream.Close();
+            v.Value = stream.ToArray();
+          }
+          value = v;
+        }
+        if (add) {
+          value.Name = item.Key;
+          value.DataType = new DataType();
+          value.DataType.Name = item.Value.GetType().Name;
+          value.DataType.TypeName = item.Value.GetType().AssemblyQualifiedName;
+          values.Add(value);
+        } else {
+          add = true;
+        }
+      }
+      return values;
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/RunCreationClient.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/RunCreationClient.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/RunCreationClient.cs	(revision 8055)
@@ -0,0 +1,147 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 HeuristicLab.Clients.Common;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("RunCreationClient", "OKB run creation client.")]
+  public sealed class RunCreationClient : IContent {
+    private static RunCreationClient instance;
+    public static RunCreationClient Instance {
+      get {
+        if (instance == null) instance = new RunCreationClient();
+        return instance;
+      }
+    }
+
+    #region Properties
+    private List<Algorithm> algorithms;
+    public IEnumerable<Algorithm> Algorithms {
+      get { return algorithms; }
+    }
+    private List<Problem> problems;
+    public IEnumerable<Problem> Problems {
+      get { return problems; }
+    }
+    #endregion
+
+    private RunCreationClient() {
+      algorithms = new List<Algorithm>();
+      problems = new List<Problem>();
+    }
+
+    #region Refresh
+    public void Refresh() {
+      OnRefreshing();
+      algorithms = new List<Algorithm>();
+      problems = new List<Problem>();
+      try {
+        algorithms.AddRange(CallRunCreationService<List<Algorithm>>(s => s.GetAlgorithms("HeuristicLab 3.3")));
+        problems.AddRange(CallRunCreationService<List<Problem>>(s => s.GetProblems("HeuristicLab 3.3")));
+      }
+      finally {
+        OnRefreshed();
+      }
+    }
+    public void RefreshAsync(Action<Exception> exceptionCallback) {
+      var call = new Func<Exception>(delegate() {
+        try {
+          Refresh();
+        }
+        catch (Exception ex) {
+          return ex;
+        }
+        return null;
+      });
+      call.BeginInvoke(delegate(IAsyncResult result) {
+        Exception ex = call.EndInvoke(result);
+        if (ex != null) exceptionCallback(ex);
+      }, null);
+    }
+    #endregion
+
+    #region Algorithm Methods
+    public static byte[] GetAlgorithmData(long algorithmId) {
+      return CallRunCreationService<byte[]>(s => s.GetAlgorithmData(algorithmId));
+    }
+    #endregion
+
+    #region Problem Methods
+    public static byte[] GetProblemData(long problemId) {
+      return CallRunCreationService<byte[]>(s => s.GetProblemData(problemId));
+    }
+    #endregion
+
+    #region Run Methods
+    public void AddRun(Run run) {
+      CallRunCreationService(s => s.AddRun(run));
+    }
+    #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);
+    }
+    #endregion
+
+    #region Helpers
+    private static void CallRunCreationService(Action<IRunCreationService> call) {
+      RunCreationServiceClient client = ClientFactory.CreateClient<RunCreationServiceClient, IRunCreationService>();
+      try {
+        call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
+    private static T CallRunCreationService<T>(Func<IRunCreationService, T> call) {
+      RunCreationServiceClient client = ClientFactory.CreateClient<RunCreationServiceClient, IRunCreationService>();
+      try {
+        return call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/Algorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/Algorithm.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/Algorithm.cs	(revision 8055)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  public partial class Algorithm {
+    public override string ToString() {
+      return this.Name;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/GenerateServiceClient.cmd
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/GenerateServiceClient.cmd	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/GenerateServiceClient.cmd	(revision 8055)
@@ -0,0 +1,24 @@
+echo off
+
+echo.
+echo *******************************************************************************************
+echo Generating OKB run creation service client
+echo.
+
+REM If app.config should be generated, use option "/config:..\..\app.config" and optionally "/mergeConfig" instead of "/noConfig".
+
+svcutil.exe ^
+  http://localhost:8732/Design_Time_Addresses/OKB-3.3/RunCreationService/mex ^
+  /out:RunCreationServiceClient ^
+  /namespace:*,HeuristicLab.Clients.OKB.RunCreation ^
+  /collectionType:System.Collections.Generic.List`1 ^
+  /targetClientVersion:Version35 ^
+  /enableDataBinding ^
+  /noConfig
+
+echo.
+echo Generation of OKB run creation service client finished.
+echo *******************************************************************************************
+echo.
+
+pause
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/Problem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/Problem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/Problem.cs	(revision 8055)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  public partial class Problem {
+    public override string ToString() {
+      return this.Name;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/RunCreationServiceClient.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/RunCreationServiceClient.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/RunCreationServiceClient.cs	(revision 8055)
@@ -0,0 +1,1054 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.261
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.OKB.RunCreation
+{
+    using System.Runtime.Serialization;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Algorithm", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class Algorithm : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.AlgorithmClass AlgorithmClassField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.DataType DataTypeField;
+        
+        private string DescriptionField;
+        
+        private long IdField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.AlgorithmClass AlgorithmClass
+        {
+            get
+            {
+                return this.AlgorithmClassField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.AlgorithmClassField, value) != true))
+                {
+                    this.AlgorithmClassField = value;
+                    this.RaisePropertyChanged("AlgorithmClass");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.DataType DataType
+        {
+            get
+            {
+                return this.DataTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true))
+                {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="AlgorithmClass", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class AlgorithmClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string DescriptionField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="DataType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class DataType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string NameField;
+        
+        private string TypeNameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string TypeName
+        {
+            get
+            {
+                return this.TypeNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.TypeNameField, value) != true))
+                {
+                    this.TypeNameField = value;
+                    this.RaisePropertyChanged("TypeName");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Problem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class Problem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.DataType DataTypeField;
+        
+        private string DescriptionField;
+        
+        private long IdField;
+        
+        private string NameField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.ProblemClass ProblemClassField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.DataType DataType
+        {
+            get
+            {
+                return this.DataTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true))
+                {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.ProblemClass ProblemClass
+        {
+            get
+            {
+                return this.ProblemClassField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ProblemClassField, value) != true))
+                {
+                    this.ProblemClassField = value;
+                    this.RaisePropertyChanged("ProblemClass");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ProblemClass", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class ProblemClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string DescriptionField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Run", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class Run : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private long AlgorithmIdField;
+        
+        private System.Guid ClientIdField;
+        
+        private System.DateTime CreatedDateField;
+        
+        private System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ParameterValuesField;
+        
+        private long ProblemIdField;
+        
+        private System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ResultValuesField;
+        
+        private System.Guid UserIdField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long AlgorithmId
+        {
+            get
+            {
+                return this.AlgorithmIdField;
+            }
+            set
+            {
+                if ((this.AlgorithmIdField.Equals(value) != true))
+                {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid ClientId
+        {
+            get
+            {
+                return this.ClientIdField;
+            }
+            set
+            {
+                if ((this.ClientIdField.Equals(value) != true))
+                {
+                    this.ClientIdField = value;
+                    this.RaisePropertyChanged("ClientId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime CreatedDate
+        {
+            get
+            {
+                return this.CreatedDateField;
+            }
+            set
+            {
+                if ((this.CreatedDateField.Equals(value) != true))
+                {
+                    this.CreatedDateField = value;
+                    this.RaisePropertyChanged("CreatedDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ParameterValues
+        {
+            get
+            {
+                return this.ParameterValuesField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ParameterValuesField, value) != true))
+                {
+                    this.ParameterValuesField = value;
+                    this.RaisePropertyChanged("ParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long ProblemId
+        {
+            get
+            {
+                return this.ProblemIdField;
+            }
+            set
+            {
+                if ((this.ProblemIdField.Equals(value) != true))
+                {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ResultValues
+        {
+            get
+            {
+                return this.ResultValuesField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ResultValuesField, value) != true))
+                {
+                    this.ResultValuesField = value;
+                    this.RaisePropertyChanged("ResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid UserId
+        {
+            get
+            {
+                return this.UserIdField;
+            }
+            set
+            {
+                if ((this.UserIdField.Equals(value) != true))
+                {
+                    this.UserIdField = value;
+                    this.RaisePropertyChanged("UserId");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Value", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.BinaryValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.LongValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.FloatValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.TimeSpanValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.IntValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.BoolValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.DoubleValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.PercentValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.StringValue))]
+    public partial class Value : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.DataType DataTypeField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.DataType DataType
+        {
+            get
+            {
+                return this.DataTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true))
+                {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="BinaryValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class BinaryValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private byte[] ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public byte[] Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ValueField, value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="LongValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class LongValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private long ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="FloatValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class FloatValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private float ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public float Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="TimeSpanValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class TimeSpanValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private long ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="IntValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class IntValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private int ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="BoolValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class BoolValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private bool ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="DoubleValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class DoubleValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private double ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public double Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="PercentValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class PercentValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private double ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public double Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="StringValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class StringValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private string ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ValueField, value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="HeuristicLab.Clients.OKB.RunCreation.IRunCreationService")]
+    public interface IRunCreationService
+    {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetAlgorithms", ReplyAction="http://tempuri.org/IRunCreationService/GetAlgorithmsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Algorithm> GetAlgorithms(string platformName);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetAlgorithmData", ReplyAction="http://tempuri.org/IRunCreationService/GetAlgorithmDataResponse")]
+        byte[] GetAlgorithmData(long algorithmId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetProblems", ReplyAction="http://tempuri.org/IRunCreationService/GetProblemsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Problem> GetProblems(string platformName);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetProblemData", ReplyAction="http://tempuri.org/IRunCreationService/GetProblemDataResponse")]
+        byte[] GetProblemData(long problemId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/AddRun", ReplyAction="http://tempuri.org/IRunCreationService/AddRunResponse")]
+        void AddRun(HeuristicLab.Clients.OKB.RunCreation.Run run);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IRunCreationServiceChannel : HeuristicLab.Clients.OKB.RunCreation.IRunCreationService, System.ServiceModel.IClientChannel
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class RunCreationServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.OKB.RunCreation.IRunCreationService>, HeuristicLab.Clients.OKB.RunCreation.IRunCreationService
+    {
+        
+        public RunCreationServiceClient()
+        {
+        }
+        
+        public RunCreationServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName)
+        {
+        }
+        
+        public RunCreationServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public RunCreationServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public RunCreationServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress)
+        {
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Algorithm> GetAlgorithms(string platformName)
+        {
+            return base.Channel.GetAlgorithms(platformName);
+        }
+        
+        public byte[] GetAlgorithmData(long algorithmId)
+        {
+            return base.Channel.GetAlgorithmData(algorithmId);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Problem> GetProblems(string platformName)
+        {
+            return base.Channel.GetProblems(platformName);
+        }
+        
+        public byte[] GetProblemData(long problemId)
+        {
+            return base.Channel.GetProblemData(problemId);
+        }
+        
+        public void AddRun(HeuristicLab.Clients.OKB.RunCreation.Run run)
+        {
+            base.Channel.AddRun(run);
+        }
+    }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/SingleObjectiveOKBProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/SingleObjectiveOKBProblem.cs	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/SingleObjectiveOKBProblem.cs	(revision 8055)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("Single-Objective OKB Problem", "Represents a single-objective problem which is stored in the OKB.")]
+  [Creatable("Optimization Knowledge Base (OKB)")]
+  [StorableClass]
+  public sealed class SingleObjectiveOKBProblem : OKBProblem, ISingleObjectiveHeuristicOptimizationProblem, IStorableContent {
+    public string Filename { get; set; }
+
+    public override Type ProblemType {
+      get { return typeof(ISingleObjectiveHeuristicOptimizationProblem); }
+    }
+    public new ISingleObjectiveHeuristicOptimizationProblem Problem {
+      get { return base.Problem as ISingleObjectiveHeuristicOptimizationProblem; }
+    }
+    public IParameter BestKnownQualityParameter {
+      get { return Problem.BestKnownQualityParameter; }
+    }
+    public IParameter MaximizationParameter {
+      get { return Problem.MaximizationParameter; }
+    }
+    public new ISingleObjectiveEvaluator Evaluator {
+      get { return Problem.Evaluator; }
+    }
+
+    [StorableConstructor]
+    private SingleObjectiveOKBProblem(bool deserializing) : base(deserializing) { }
+    private SingleObjectiveOKBProblem(SingleObjectiveOKBProblem original, Cloner cloner) : base(original, cloner) { }
+    public SingleObjectiveOKBProblem() : base(new EmptySingleObjectiveProblem("No problem selected. Please choose a single-objective problem instance from the OKB.")) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SingleObjectiveOKBProblem(this, cloner);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Clients.OKB/3.3/app.config
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB/3.3/app.config	(revision 8055)
+++ /trunk/sources/HeuristicLab.Clients.OKB/3.3/app.config	(revision 8055)
@@ -0,0 +1,110 @@
+<?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_IAdministrationService" 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_IRunCreationService" 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_IQueryService" 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://services.heuristiclab.com/OKB-3.3/AdministrationService.svc"
+          binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAdministrationService"
+          contract="HeuristicLab.Clients.OKB.Administration.IAdministrationService"
+          name="WSHttpBinding_IAdministrationService" behaviorConfiguration="DefaultEndpointBehavior">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ==" />
+        </identity>
+      </endpoint>
+      <endpoint address="http://services.heuristiclab.com/OKB-3.3/RunCreationService.svc"
+          binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IRunCreationService"
+          contract="HeuristicLab.Clients.OKB.RunCreation.IRunCreationService"
+          name="WSHttpBinding_IRunCreationService" behaviorConfiguration="DefaultEndpointBehavior">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ==" />
+        </identity>
+      </endpoint>
+      <endpoint address="http://services.heuristiclab.com/OKB-3.3/QueryService.svc"
+          binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IQueryService"
+          contract="HeuristicLab.Clients.OKB.Query.IQueryService" name="WSHttpBinding_IQueryService"
+          behaviorConfiguration="DefaultEndpointBehavior">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ==" />
+        </identity>
+      </endpoint>
+    </client>
+  </system.serviceModel>
+</configuration>
