Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/AdministratorMenuItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/AdministratorMenuItem.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/AdministratorMenuItem.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AdministratorView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmClassCollectionView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmCollectionView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/AlgorithmView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/NamedOKBItemView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemCollectionView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/OKBItemView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/PlatformCollectionView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemClassCollectionView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemCollectionView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Administration/Views/ProblemView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj	(revision 8054)
@@ -0,0 +1,344 @@
+﻿<?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>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Clients.Access-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Clients.Access-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Clients.Access.Views-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Clients.Access.Views-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Clients.Common-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Clients.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core.Views-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization.Views-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization.Views-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimizer-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimizer-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Administration\AdministratorMenuItem.cs" />
+    <Compile Include="Administration\Views\AdministratorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Administration\Views\AdministratorView.Designer.cs">
+      <DependentUpon>AdministratorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\AlgorithmClassCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Administration\Views\AlgorithmClassCollectionView.Designer.cs">
+      <DependentUpon>AlgorithmClassCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\AlgorithmCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Administration\Views\AlgorithmCollectionView.Designer.cs">
+      <DependentUpon>AlgorithmCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\AlgorithmView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Administration\Views\AlgorithmView.Designer.cs">
+      <DependentUpon>AlgorithmView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\OKBItemCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Administration\Views\OKBItemCollectionView.Designer.cs">
+      <DependentUpon>OKBItemCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\NamedOKBItemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Administration\Views\NamedOKBItemView.Designer.cs">
+      <DependentUpon>NamedOKBItemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\OKBItemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Administration\Views\OKBItemView.Designer.cs">
+      <DependentUpon>OKBItemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\PlatformCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Administration\Views\PlatformCollectionView.Designer.cs">
+      <DependentUpon>PlatformCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\ProblemClassCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Administration\Views\ProblemClassCollectionView.Designer.cs">
+      <DependentUpon>ProblemClassCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\ProblemCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Administration\Views\ProblemCollectionView.Designer.cs">
+      <DependentUpon>ProblemCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Administration\Views\ProblemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <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">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\CombinedFilterView.Designer.cs">
+      <DependentUpon>CombinedFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonTimeSpanFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonTimeSpanFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonTimeSpanFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonPercentFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonPercentFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonPercentFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonDateTimeFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonDateTimeFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonDateTimeFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonFloatFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonFloatFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonFloatFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonIntFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonIntFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonIntFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\EqualityComparisonBoolFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\EqualityComparisonBoolFilterView.Designer.cs">
+      <DependentUpon>EqualityComparisonBoolFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\EqualityComparisonFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\EqualityComparisonFilterView.Designer.cs">
+      <DependentUpon>EqualityComparisonFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\FilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\FilterView.Designer.cs">
+      <DependentUpon>FilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonDoubleFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonDoubleFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonDoubleFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonLongFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\OrdinalComparisonLongFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonLongFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\QueryView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\QueryView.Designer.cs">
+      <DependentUpon>QueryView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\StringComparisonAvailableValuesFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Query\Views\StringComparisonAvailableValuesFilterView.Designer.cs">
+      <DependentUpon>StringComparisonAvailableValuesFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Query\Views\StringComparisonFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <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">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="RunCreation\Views\OKBAlgorithmView.Designer.cs">
+      <DependentUpon>OKBAlgorithmView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="RunCreation\Views\OKBExperimentUploadView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="RunCreation\Views\OKBExperimentUploadView.Designer.cs">
+      <DependentUpon>OKBExperimentUploadView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="RunCreation\Views\OKBProblemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="RunCreation\Views\OKBProblemView.Designer.cs">
+      <DependentUpon>OKBProblemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="RunCreation\Views\OKBRunView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <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.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>
+  </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)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.cs.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Plugin.cs.frame" "%25ProjectDir%25\Plugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Plugin.cs.frame	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Plugin.cs.frame	(revision 8054)
@@ -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.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.Common", "3.3")]
+  [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.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Optimizer", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabClientsOKBViewsPlugin : PluginBase {
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/QueryMenuItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/QueryMenuItem.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/QueryMenuItem.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/CombinedFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonBoolFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/EqualityComparisonFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/FilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDateTimeFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonDoubleFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonFloatFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonIntFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonLongFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonPercentFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/OrdinalComparisonTimeSpanFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/QueryView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonAvailableValuesFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/Query/Views/StringComparisonFilterView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/CreateFromExperimentMenuItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/CreateFromExperimentMenuItem.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/CreateFromExperimentMenuItem.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBAlgorithmView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.Designer.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.Designer.cs	(revision 8054)
@@ -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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.cs	(revision 8054)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBRunView.cs	(revision 8054)
@@ -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: anches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Administration/AdministratorMenuItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Administration/AdministratorMenuItem.cs	(revision 8053)
+++ 	(revision )
@@ -1,47 +1,0 @@
-﻿#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: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 8053)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 8054)
@@ -75,12 +75,4 @@
       <Private>False</Private>
     </Reference>
-    <Reference Include="HeuristicLab.MainForm-3.3">
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
     <Reference Include="HeuristicLab.Operators-3.3">
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
@@ -93,8 +85,4 @@
     <Reference Include="HeuristicLab.Optimization.Views-3.3">
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization.Views-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Optimizer-3.3">
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimizer-3.3.dll</HintPath>
       <Private>False</Private>
     </Reference>
@@ -124,5 +112,4 @@
   <ItemGroup>
     <Compile Include="Administration\AdministrationClient.cs" />
-    <Compile Include="Administration\AdministratorMenuItem.cs" />
     <Compile Include="Administration\ServiceClient\AdministrationServiceClient.cs" />
     <Compile Include="Administration\ServiceClient\Algorithm.cs" />
@@ -136,74 +123,7 @@
     <Compile Include="Administration\ServiceClient\Problem.cs" />
     <Compile Include="Administration\ServiceClient\ProblemClass.cs" />
-    <Compile Include="Administration\Views\AdministratorView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\AdministratorView.Designer.cs">
-      <DependentUpon>AdministratorView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Administration\Views\AlgorithmClassCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\AlgorithmClassCollectionView.Designer.cs">
-      <DependentUpon>AlgorithmClassCollectionView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Administration\Views\AlgorithmCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\AlgorithmCollectionView.Designer.cs">
-      <DependentUpon>AlgorithmCollectionView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Administration\Views\AlgorithmView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\AlgorithmView.Designer.cs">
-      <DependentUpon>AlgorithmView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Administration\Views\OKBItemCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\OKBItemCollectionView.Designer.cs">
-      <DependentUpon>OKBItemCollectionView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Administration\Views\NamedOKBItemView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\NamedOKBItemView.Designer.cs">
-      <DependentUpon>NamedOKBItemView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Administration\Views\OKBItemView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\OKBItemView.Designer.cs">
-      <DependentUpon>OKBItemView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Administration\Views\PlatformCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\PlatformCollectionView.Designer.cs">
-      <DependentUpon>PlatformCollectionView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Administration\Views\ProblemClassCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\ProblemClassCollectionView.Designer.cs">
-      <DependentUpon>ProblemClassCollectionView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Administration\Views\ProblemCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\ProblemCollectionView.Designer.cs">
-      <DependentUpon>ProblemCollectionView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Administration\Views\ProblemView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Administration\Views\ProblemView.Designer.cs">
-      <DependentUpon>ProblemView.cs</DependentUpon>
-    </Compile>
     <Compile Include="OKBRoles.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Query\QueryClient.cs" />
-    <Compile Include="Query\QueryMenuItem.cs" />
     <Compile Include="Query\ServiceClient\CombinedFilter.cs" />
     <Compile Include="Query\ServiceClient\ValueName.cs" />
@@ -231,94 +151,4 @@
     <Compile Include="Query\ServiceClient\StringComparisonAvailableValuesFilter.cs" />
     <Compile Include="Query\ServiceClient\StringComparisonFilter.cs" />
-    <Compile Include="Query\Views\CombinedFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\CombinedFilterView.Designer.cs">
-      <DependentUpon>CombinedFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonTimeSpanFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonTimeSpanFilterView.Designer.cs">
-      <DependentUpon>OrdinalComparisonTimeSpanFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonPercentFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonPercentFilterView.Designer.cs">
-      <DependentUpon>OrdinalComparisonPercentFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonDateTimeFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonDateTimeFilterView.Designer.cs">
-      <DependentUpon>OrdinalComparisonDateTimeFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonFloatFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonFloatFilterView.Designer.cs">
-      <DependentUpon>OrdinalComparisonFloatFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonIntFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonIntFilterView.Designer.cs">
-      <DependentUpon>OrdinalComparisonIntFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\EqualityComparisonBoolFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\EqualityComparisonBoolFilterView.Designer.cs">
-      <DependentUpon>EqualityComparisonBoolFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\EqualityComparisonFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\EqualityComparisonFilterView.Designer.cs">
-      <DependentUpon>EqualityComparisonFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\FilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\FilterView.Designer.cs">
-      <DependentUpon>FilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonDoubleFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonDoubleFilterView.Designer.cs">
-      <DependentUpon>OrdinalComparisonDoubleFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonFilterView.Designer.cs">
-      <DependentUpon>OrdinalComparisonFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonLongFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\OrdinalComparisonLongFilterView.Designer.cs">
-      <DependentUpon>OrdinalComparisonLongFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\QueryView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\QueryView.Designer.cs">
-      <DependentUpon>QueryView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\StringComparisonAvailableValuesFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\StringComparisonAvailableValuesFilterView.Designer.cs">
-      <DependentUpon>StringComparisonAvailableValuesFilterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Query\Views\StringComparisonFilterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Query\Views\StringComparisonFilterView.Designer.cs">
-      <DependentUpon>StringComparisonFilterView.cs</DependentUpon>
-    </Compile>
     <Compile Include="RunCreation\EmptyAlgorithm.cs" />
     <Compile Include="RunCreation\EmptyEvaluator.cs" />
@@ -336,5 +166,4 @@
     <Compile Include="RunCreation\OKBProblem.cs" />
     <Compile Include="RunCreation\OKBRun.cs" />
-    <Compile Include="RunCreation\CreateFromExperimentMenuItem.cs" />
     <Compile Include="RunCreation\RunCreationClient.cs" />
     <Compile Include="RunCreation\ServiceClient\Algorithm.cs" />
@@ -343,28 +172,4 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="RunCreation\SingleObjectiveOKBProblem.cs" />
-    <Compile Include="RunCreation\Views\OKBAlgorithmView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RunCreation\Views\OKBAlgorithmView.Designer.cs">
-      <DependentUpon>OKBAlgorithmView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RunCreation\Views\OKBExperimentUploadView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RunCreation\Views\OKBExperimentUploadView.Designer.cs">
-      <DependentUpon>OKBExperimentUploadView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RunCreation\Views\OKBProblemView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RunCreation\Views\OKBProblemView.Designer.cs">
-      <DependentUpon>OKBProblemView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RunCreation\Views\OKBRunView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RunCreation\Views\OKBRunView.Designer.cs">
-      <DependentUpon>OKBRunView.cs</DependentUpon>
-    </Compile>
     <None Include="app.config" />
     <None Include="ascheibe app.config" />
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Plugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Plugin.cs.frame	(revision 8053)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Plugin.cs.frame	(revision 8054)
@@ -36,11 +36,8 @@
   [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.Data", "3.3")]  
   [PluginDependency("HeuristicLab.Operators", "3.3")]
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
-  [PluginDependency("HeuristicLab.Optimization.Views", "3.3")]
-  [PluginDependency("HeuristicLab.Optimizer", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization.Views", "3.3")]  
   [PluginDependency("HeuristicLab.Parameters", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
Index: anches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/QueryMenuItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/QueryMenuItem.cs	(revision 8053)
+++ 	(revision )
@@ -1,42 +1,0 @@
-﻿#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: anches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/RunCreation/CreateFromExperimentMenuItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/RunCreation/CreateFromExperimentMenuItem.cs	(revision 8053)
+++ 	(revision )
@@ -1,50 +1,0 @@
-﻿#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: /branches/OKB (trunk integration)/HeuristicLab.OKB.sln
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.sln	(revision 8053)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.sln	(revision 8054)
@@ -8,7 +8,7 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.OKB-3.3", "HeuristicLab.Services.OKB\3.3\HeuristicLab.Services.OKB-3.3.csproj", "{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.OKB.DataAccess-3.3.Tests", "HeuristicLab.Services.OKB.DataAccess\3.3\Tests\HeuristicLab.Services.OKB.DataAccess-3.3.Tests.csproj", "{89234006-FE1B-4A15-AFEC-91CB3526F0A5}"
+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-3.3", "HeuristicLab.Clients.OKB\3.3\HeuristicLab.Clients.OKB-3.3.csproj", "{73857A9C-9706-4B72-8D9C-210B5B6A5691}"
+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
@@ -46,12 +46,4 @@
 		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x86.ActiveCfg = Release|x86
 		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x86.Build.0 = Release|x86
-		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|x64.ActiveCfg = Release|Any CPU
-		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|x86.ActiveCfg = Release|Any CPU
 		{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
@@ -62,4 +54,12 @@
 		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Release|x64.ActiveCfg = Release|Any CPU
 		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Release|x86.ActiveCfg = Release|Any CPU
+		{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|Any CPU
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{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|Any CPU
+		{399EBB6E-37A1-4AE4-B8CD-0D461FF286A3}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
